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()
)可以看出,返回值需要转换。

谢谢您的回答。也许我在问题中表达得不够清楚,但我不需要无效字段的名称。我需要验证失败的整个请求对象(即所有字段)。原因是,在验证失败后,我可能必须使用一些有效字段来形成自定义错误响应。