Java Bean验证不适用于Web初始化绑定程序

时间:2018-12-03 12:21:33

标签: spring-boot bean-validation spring-mvc-initbinders

我有一个控制器如下:

@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();
 }
}

1 个答案:

答案 0 :(得分:1)

binder.setValidator(eventValidator);将替换其他注册的验证器。

更改为:

binder.addValidators(eventValidator);