尝试在Spring Controller中使用BindingResult时获取ConstraintViolationException

时间:2019-02-20 10:58:52

标签: java spring spring-boot bean-validation

我有一个端点,在这里我验证接收到的包含对象集合的json文档。我只想记录这些未通过验证的对象,而其他对象我想存储在db中。在这种情况下,控制器应返回200 OK。我试图为此目的使用BindingResult对象。不幸的是,我总是收到ConstraintViolationException。似乎它在进入方法并引发异常之前对其进行了验证。如何强制它使用BindingResult对象?

@RestController
@Validated
@RequestMapping(path = "/test")
class TestController {

    @PostMapping(consumes = APPLICATION_JSON_VALUE)
    public ResponseEntity<Void> addObjects(@RequestBody @Valid List<Document> objects, BindingResult bindingResult) {

        if(bindingResult.hasErrors()){

        }            
        return new ResponseEntity<Void>(HttpStatus.OK);
    }

}

我正在将Spring Boot 1.5.9.RELEASE与Java 8配合使用

2 个答案:

答案 0 :(得分:0)

您能添加带有注释的模型类吗? 请记住,如果您在Document类中有任何字段是您自定义定义的类,并且还希望对其进行验证,那么您也必须用@Valid注释修饰这些字段。

答案 1 :(得分:0)

我终于设法解决了。问题在于控制器类上的@Validated批注。使用这个注释弹簧,可以根据请求进行验证,并抛出ConstraintViolationException。否则,验证将在稍后触发,其结果将按预期方式存储在BindingResult对象中