在我的控制器中,当我将验证器设置为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;
有没有办法添加自定义验证器并仍然应用基于默认注释的验证?
答案 0 :(得分:1)
添加自定义验证器确实会覆盖默认验证器。
需要在自定义验证器之上注入基本验证器:
@InitBinder
private void initBinder(WebDataBinder binder) {
binder.replaceValidators(validator, basicValidator);
}
@Autowired
基本验证器声明如下:
@Bean
public Validator basicValidator() {
return new LocalValidatorFactoryBean();
}