【发布时间】:2018-12-03 12:21:33
【问题描述】:
我有一个如下所示的控制器:
@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,以及在 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();
}
}
【问题讨论】:
-
尝试了建议的方法,但还是不行。
标签: java spring-boot spring-mvc bean-validation spring-mvc-initbinders