我可以在预处理中获得Spring Validation错误吗?

时间:2017-11-30 16:02:52

标签: spring spring-mvc

我目前在我的春季应用程序中的所有端点都有类似的东西。

if(bindingResult.hasErrors()){
    return new ResponseEntity<>(BAD_REQUEST);
}

我想把它移到一个http拦截器上,这样我只需要在一个地方。但是,我无法弄清楚如何从preHandle中获取绑定结果中的所有错误。

如何在preHandle中获取验证错误,或者在启动实际路由之前的其他时间?

1 个答案:

答案 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
    }

}