Использование @BindingResult с @Validated - PullRequest
1 голос
/ 03 июля 2019

Примечание: Я прочитал почти все сообщения стека, которые я получаю, когда я ищу @ valid против @ validated и не могу найти ответ, поэтому я публикую это.

Я так растерялся, что @Validated делает здесь. Если inputParms недопустимо, он выбрасывает javax.validation.ConstraintViolationException и даже не входит в код. Но если я заменю @Validated на @Valid Не сработает исключение и bindingResult.hasErrors() его поймает.

@RestController
@Validated // what is this doing ??
public class MyRestController{
    @PostMapping(value="/my-data",produces= {MediaType.APPLICATION_JSON_UTF8_VALUE})
    public ResponseEntity<?> doSomething(@Valid @RequestBody MyInputParam inputParms,BindingResult bindingResult){
        if(bindingResult.hasErrors()) {
            //do something here
        }
    }
}

Так что, если я использую @Validated, BindingResult не пригодится вообще? Или даже просто, чем @Validated отличается от @Valid

1 Ответ

0 голосов
/ 16 июля 2019

См. Разница между @Valid и @Validated весной .

Проблема в вашем конкретном случае заключается в том, что @Validated смешивается с @Valid. Варианты исправить это:

  • удалите @Validated, объявленный в классе, и используйте @Validated или @Valid для параметра
  • используйте либо @Valid, либо @Validated в обоих местах (класс и параметр)
@RestController
public class MyRestController {

    @PostMapping(value = "/my-data", produces = {MediaType.APPLICATION_JSON_UTF8_VALUE})
    public ResponseEntity<?> doSomething(@Validated @RequestBody MyInputParam inputParms, 
                                         BindingResult bindingResult) {
        if(bindingResult.hasErrors()) {
            //do something here
        }
    }

}
...