Проверка Java bean не работает с привязкой веб-инициализации - PullRequest
0 голосов
/ 03 декабря 2018

У меня есть контроллер выглядит следующим образом:

@RestController
@RequestMapping(value="/api/events")
public class EventController{

    @Inject
    private EventValidator eventValidator;

    @InitBinder
    @Qualifier("eventValidatior")
    private void initBinder(WebDataBinder binder){
        binder.setValidator(eventValidator);
    }

    @PostMapping()
    public ResponseEntity<EventModel> save(@Valid @RequestBody EventRequest request, BindingResult result){
        if(result.hasErrors()){
            //some validation
        }
        //some other logic

    }   
}

Тогда у меня есть EventRequest pojo:

 public class EventRequest{
 private String eventName;

 @Valid
 @NotNull
 private List<Event> events;

 //setters and getters
}

В моем контроллере, у меня есть 2 типа проверки,InitBinder, а также проверка Java-бина (JSR-303), которая использует @NotNull в классе EventRequest.

Проблема в том, что если в контроллере есть BindingResult result, аннотация @NotNull не будет работать.И даже каскадная проверка в классе Event тоже не работает.

Почему, как я могу иметь оба типа проверки?


Попытался добавить это, но все жене работает

@Configuration
public class ValidatorConfig {

 @Bean
 public LocalValidatorFactoryBean defaultValidator() {
    return new LocalValidatorFactoryBean();
 }

 @Bean
 public MethodValidationPostProcessor methodValidationPostProcessor() {
    return new MethodValidationPostProcessor();
 }
}

1 Ответ

0 голосов
/ 08 декабря 2018

binder.setValidator(eventValidator); заменит другие зарегистрированные валидаторы.

Измените на:

binder.addValidators(eventValidator);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...