@InitBinder 限制为单个验证器

@InitBinder restricting to single validator

在我的控制器中,当我为 webdatabinder 设置验证器时:

@InitBinder
private void initBinder(WebDataBinder binder) {
    binder.setValidator(validator);
}

我的控制器只应用该验证器而忽略其他字段的验证:

@RequestMapping(method = RequestMethod.POST)
@ResponseBody
public void processRecord(@Valid @RequestBody Record record, Errors errors) {
    //code
}

忽略的字段验证是基于注释的:

@NotNull
@Size(min = 2, max = 60, message="firstName must be between 2 and 60 characters long.")
private String firstName;

有没有办法添加自定义验证器并仍然应用基于默认注释的验证?

添加自定义验证器确实会覆盖默认验证器。

需要在自定义验证器之上注入一个基本验证器:

    @InitBinder
    private void initBinder(WebDataBinder binder) {
        binder.replaceValidators(validator, basicValidator);
    }

@Autowired 基本验证器声明如下:

    @Bean
    public Validator basicValidator() {
        return new LocalValidatorFactoryBean();
    }