【发布时间】:2020-06-17 10:33:51
【问题描述】:
我有一个案例,我想对端点的@RequestParams 进行一些输入验证。
我了解验证器和自定义验证器,我目前的策略是围绕 RequestParams 创建一个包装器对象,一个自定义验证器并应用类级别的注释来触发自定义验证。
我的问题是自定义验证正在实现ConstraintValidator,这意味着验证器将返回true或false,并且Spring会使用一些文本创建错误(我也知道我可以更改此文本)。然而,我的愿望是创建一个自定义有效负载返回给客户端。一个例子可以是
class MyError {
int code;
String message;
}
返回此对象的方法是通过 @ControllerAdvice 错误处理程序,它知道 ConstraintValidationException 应该返回我的自定义有效负载格式。但是,由于输入验证失败的不同原因,我需要返回不同的代码和消息。例如:
- 字段为空 -> 代码 XXX
- 字段格式不正确 -> 代码 YYY
据我所知,可以从我的@ControllerAdvice 访问的异常几乎无法自定义,我可以获得发生的错误列表,但我无法轻松确定发生了什么。 (技术上我可以,但它必须基于消息字符串,这很弱)。
有没有办法为异常提供额外的数据,以便我可以从 @ControllerAdvice 中区分发生了什么并相应地创建我的自定义错误响应?
我是不是走错了路?
【问题讨论】:
标签: spring spring-boot validation exception