Проверка Java bean не работает с привязкой веб-инициализации
У меня контроллер выглядит так:
@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 ответ
Решение
binder.setValidator(eventValidator);
заменит другие зарегистрированные валидаторы.
Изменить на:
binder.addValidators(eventValidator);