我目前在我的春季应用程序中的所有端点都有类似的东西。
if(bindingResult.hasErrors()){
return new ResponseEntity<>(BAD_REQUEST);
}
我想把它移到一个http拦截器上,这样我只需要在一个地方。但是,我无法弄清楚如何从preHandle
中获取绑定结果中的所有错误。
如何在preHandle中获取验证错误,或者在启动实际路由之前的其他时间?
答案 0 :(得分:2)
实现我认为您正在寻找的方法的一种方法是不将BindingResult包含为方法参数。鉴于没有包含BindingResult作为方法参数,Spring将抛出BindException异常。您可以定义ExceptionHandler,通常我将它们放在@ControllerAdvice中,以根据需要处理异常。下面是一些示例代码
控制器
@PostMapping
public SomeReturnObject someMethod(@Valid SomeCommand command) {
// logic - no longer contains checks for binding result errors
}
作为ControllerAdvice的一部分
@ControllerAdvice
@Order(Ordered.HIGHEST_PRECEDENCE)
public class ApplicationControllerAdvice {
....
@ExceptionHandler(BindException.class)
@ResponseBody
@ResponseStatus(value = HttpStatus.BAD_REQUEST)
protected SomeResponse handleBindException(BindException ex) {
// handle exception
}
}