【发布时间】:2022-02-03 15:03:28
【问题描述】:
控制器方法:
public Mission createMission(final @Valid @RequestBody Mission mission) {
//save..
return mission;
}
我想将所有验证错误信息枚举为json并返回。
我可以通过创建一个新的异常类、在控制器方法参数中添加 BindingResult、在绑定结果有错误时抛出新的异常以及在 @ControllerAdvice 类中处理异常来做到这一点。
if (bindingResult.hasErrors()) {
throw new InvalidRequestException("Fix input and try again", bindingResult);
}
但我想避免在每个控制器方法中检查 BindingResult,而是全局处理。如果我可以处理异常,我可以做到这一点:org.springframework.web.bind.MethodArgumentNotValidException。但不幸的是Spring boot不允许
@ExceptionHandler(MethodArgumentNotValidException.class)
它显示了模棱两可的异常处理程序,因为处理了相同的异常 ResponseEntityExceptionHandler,并且我无法覆盖 handleException,因为它是最终的。我尝试通过捕获 Exception.class 来覆盖受保护的 ResponseEntity handleMethodArgumentNotValid(),但这根本没有被调用。
有什么方法可以实现这个目标吗?一个简单的任务似乎有很多事情:(
【问题讨论】:
标签: java spring validation spring-boot hibernate-validator