1

我有一个控制器,如下所示:

@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

    }   
}

然后我有一个EventRequestpojo:

 public class EventRequest{
 private String eventName;

 @Valid
 @NotNull
 private List<Event> events;

 //setters and getters
}

在我的控制器中,我有两种类型的验证,即在 EventRequest 类InitBinder中使用的 java bean 验证 (JSR-303) 。@NotNull

问题是,如果我BindingResult result在控制器中,@NotNull注释将不起作用。甚至课堂上的级联验证Event也不起作用。

为什么会这样,我怎样才能同时拥有两种类型的验证?


试图添加这个但仍然无法正常工作

@Configuration
public class ValidatorConfig {

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

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

1 回答 1

2

binder.setValidator(eventValidator);将取代其他已注册的验证器。

改成:

binder.addValidators(eventValidator);

于 2018-12-08T05:23:46.220 回答