如何解决处理MethodArgumentNotValidException时如何访问请求对象?
我正在处理请求对象验证失败后引发的MethodArgumentNotValidException
。所有常见的内容均已存在:@Valid
,@ControllerAdvice
和扩展的ResponseEntityExceptionHandler
,在其中我覆盖了handleMethodArgumentNotValid()
。
碰巧,我需要访问相同的请求对象以形成定制的错误响应。一种方法是在请求到达控制器之前对其进行拦截,并使用所需字段创建一个@RequestScope
bean,以防以后验证失败。
有更好的方法吗?
解决方法
由于有同事的建议,我发现BindingResult
中的MethodArgumentNotValidException
有一个名为getTarget()
的方法,该方法返回经过验证的对象。从方法签名(Object getTarget()
中可以看出,返回值需要强制转换。
您应该在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);
}
考虑到您有一个CustomInputErrorResponse
类,它为自定义消息和错误字段名称采用两个参数。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。