【问题标题】:Java bean validation not working with web init binderJava bean 验证不适用于 web init binder
【发布时间】: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


【解决方案1】:

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

改为:

binder.addValidators(eventValidator);

【讨论】:

    猜你喜欢
    • 2019-05-22
    • 2013-11-07
    • 2011-11-01
    • 2019-02-20
    • 1970-01-01
    • 2019-11-07
    • 2011-04-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多