我有一个控制器如下:
@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
}
在我的控制器中,我有两种验证类型:InitBinder
和在EventRequest类中使用@NotNull
的java bean验证(JSR-303)。
问题是,如果控制器中有BindingResult result
,则@NotNull
注释将不起作用。甚至Event
类中的级联验证也不起作用。
为什么呢,我如何同时拥有两种验证类型?
试图添加它,但仍然无法正常工作
@Configuration
public class ValidatorConfig {
@Bean
public LocalValidatorFactoryBean defaultValidator() {
return new LocalValidatorFactoryBean();
}
@Bean
public MethodValidationPostProcessor methodValidationPostProcessor() {
return new MethodValidationPostProcessor();
}
}
答案 0 :(得分:1)
binder.setValidator(eventValidator);
将替换其他注册的验证器。
更改为:
binder.addValidators(eventValidator);