Java 处理MethodArgumentNotValidException时如何访问请求对象?
我正在处理请求对象验证失败后引发的Java 处理MethodArgumentNotValidException时如何访问请求对象?,java,spring,spring-boot,spring-mvc,bean-validation,Java,Spring,Spring Boot,Spring Mvc,Bean Validation,我正在处理请求对象验证失败后引发的MethodArgumentNotValidException。所有常用的东西都准备好了:@Valid,@ControllerAdvice,还有一个扩展的ResponseEntityExceptionHandler,其中我覆盖了handleMethodArgumentNotValid() 碰巧,我需要访问相同的请求对象,以便形成定制的错误响应。一种方法是在请求到达控制器之前拦截请求,并创建一个带有所需字段的@RequestScopebean,以防稍后验证失败 有
MethodArgumentNotValidException
。所有常用的东西都准备好了:@Valid
,@ControllerAdvice
,还有一个扩展的ResponseEntityExceptionHandler
,其中我覆盖了handleMethodArgumentNotValid()
碰巧,我需要访问相同的请求对象,以便形成定制的错误响应。一种方法是在请求到达控制器之前拦截请求,并创建一个带有所需字段的@RequestScope
bean,以防稍后验证失败
有更好的方法吗?您应该在MethodArgumentNotValidException
类中有错误字段。您的handleMethodArgumentNotValid
函数可能如下所示
@ExceptionHandler(MethodArgumentNotValidException.class)
@ResponseStatus(value = HttpStatus.BAD_REQUEST)
@ResponseBody
public CustomInputErrorResponse handleMethodArgumentNotValid(MethodArgumentNotValidException e) {
String message = "Invalid inputs";
ArrayList<String> fieldNames = new ArrayList<String>();
for (FieldError fieldError : e.getBindingResult().getFieldErrors()) {
fieldNames.add(fieldError.getField());
}
return new CustomInputErrorResponse(message, fieldNames);
}
@ExceptionHandler(MethodArgumentNotValidException.class)
@ResponseStatus(值=HttpStatus.BAD_请求)
@应答器
公共CustomInputErrorResponse handleMethodArgumentNotValid无效(MethodArgumentNotValidException e){
字符串消息=“无效输入”;
ArrayList fieldNames=新的ArrayList();
对于(FieldError FieldError:e.getBindingResult().getFieldErrors()){
add(fieldError.getField());
}
返回新的CustomInputErrorResponse(消息、字段名);
}
考虑到您有一个CustomInputErrorResponse
类,该类为自定义消息和错误字段名提供两个参数。多亏了同事的建议,我发现MethodArgumentNotValidException
中的BindingResult
有一个名为的方法,该方法返回已验证的对象。从方法签名(Object getTarget()
)可以看出,返回值需要转换。谢谢您的回答。也许我在问题中表达得不够清楚,但我不需要无效字段的名称。我需要验证失败的整个请求对象(即所有字段)。原因是,在验证失败后,我可能必须使用一些有效字段来形成自定义错误响应。