Java bean 验证不适用于 web init 活页夹
Java bean validation not working with web init binder
我有一个这样的控制器:
@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 class 中使用 @NotNull
的 java bean 验证 (JSR-303) ].
问题是,如果我在控制器中有 BindingResult result
,@NotNull
注释将不起作用。甚至 Event
class 中的级联验证也不起作用。
为什么会这样,我怎样才能同时进行两种类型的验证?
已尝试添加但仍然无法正常工作
@Configuration
public class ValidatorConfig {
@Bean
public LocalValidatorFactoryBean defaultValidator() {
return new LocalValidatorFactoryBean();
}
@Bean
public MethodValidationPostProcessor methodValidationPostProcessor() {
return new MethodValidationPostProcessor();
}
}
binder.setValidator(eventValidator);
将替换其他已注册的验证器。
更改为:
binder.addValidators(eventValidator);
我有一个这样的控制器:
@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 class 中使用 @NotNull
的 java bean 验证 (JSR-303) ].
问题是,如果我在控制器中有 BindingResult result
,@NotNull
注释将不起作用。甚至 Event
class 中的级联验证也不起作用。
为什么会这样,我怎样才能同时进行两种类型的验证?
已尝试添加但仍然无法正常工作
@Configuration
public class ValidatorConfig {
@Bean
public LocalValidatorFactoryBean defaultValidator() {
return new LocalValidatorFactoryBean();
}
@Bean
public MethodValidationPostProcessor methodValidationPostProcessor() {
return new MethodValidationPostProcessor();
}
}
binder.setValidator(eventValidator);
将替换其他已注册的验证器。
更改为:
binder.addValidators(eventValidator);