验证

默认情况下,如果类路径上存在 Bean 验证 (例如 Hibernate Validator),则 LocalValidatorFactoryBean 被注册为全局 Validator, 用于与控制器方法参数上的 @Valid@Validated 一起使用。

您可以像以下示例所示自定义全局 Validator 实例:

@Configuration
public class WebConfiguration implements WebMvcConfigurer {

  @Override
  public Validator getValidator() {
    Validator validator = new OptionalValidatorFactoryBean();
    // ...
    return validator;
  }
}

请注意,您也可以像以下示例所示本地注册 Validator 实现:

public class FooValidator implements Validator {

  @Override
  public boolean supports(Class<?> clazz) {
    return false;
  }

  @Override
  public void validate(Object target, Errors errors) {
  }
}

@Controller
public class MyController {

  @InitBinder
  public void initBinder(WebDataBinder binder) {
    binder.addValidators(new FooValidator());
  }
}
如果您需要在某个地方注入 LocalValidatorFactoryBean,请创建一个 Bean 并用 @Primary 标记它,以避免与 MVC 配置中声明的 Bean 发生冲突。