问题复现
- 今天在使用Hibernate Validator做参数校验的时候,控制器的方法中添加了一个
@Validated
注解,就像下面这样
@ResponseBody
@RequestMapping(path = "/register", method = RequestMethod.POST)
public ResponseModel register(String otp, @Validated User user) {
}
- 然后写了一个全局的异常捕获类,专门用来捕获
User
对象校验不成功时抛出的MethodArgumentNotValidException
异常,就像下面这样
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(MethodArgumentNotValidException.class)
@ResponseBody
public ResponseModel handleMethodArgumentNotValidException(MethodArgumentNotValidException e) {
BindingResult bindingResult = e.getBindingResult();
String message = CommonErrorEnum.UNKNOW_ERROR.getMessage();
for (FieldError fieldError : bindingResult.getFieldErrors()) {
message = fieldError.getField();
if (!StringUtils.isEmpty(message)) {
message = fieldError.getDefaultMessage();
break;
}
}
return ResponseModel.createFailure(CommonErrorEnum.PARAMETER_ERROR, message);
}
}
- 使用Apifox来进行测试,最后报如下错误
解决办法
网上查了半天教程,死活不知道自己错在哪了,最后还是这篇帖子里找到了办法
- 给校验的对象再加上
@RequestBody
注解 - 前端传参时不要使用Params,而要将参数填在Body中,并使用json的形式传参。
通过这种方式来测试,终于是能返回正常的结果了,如下图所示