Spring framework: Validation API
Spring Validation
org.springframework.validation
介绍
Spring Validation是原生的API,不依赖任何外部框架或规范
org.springframework.validation.Validator接口
- 这里的
Validator不是jakarta.validation.Validator - 仅包含两个方法:
boolean supports(Class<?>):检验该验证器是否支持指定的类void validate(T obj, Errors):检验obj,将错误信息交给Errors引用 对比jakarta.validation.Validator的validate()方法,它将错误信息交给返回值Set<ConstraintViolation<T>>
Errors接口
Errors接口包含一系列方法用于获取错误信息reject(String errorCode):注册一个全局的错误,errorCode若要分层,风格可使用.符号分隔不同层reject(String errorCode, String message):使用自定义错误信息rejectValue(String field, String errorCode, String message):对特定字段field注册一个错误hasErrors():判断是否有错误hasGlobalErrors():判断是否有全局错误hasFieldErrors(String Field):判断是否有特定字段错误List<ObjectError> getGlobalErrors():获取所有全局错误FieldError getFieldError(String field):获取指定的字段错误List<FieldError> getFieldErrors():获取所有字段错误
BindingResult接口
BindingResult继承了Errors接口Object getTarget():获取发生错误的目标对象
集成Bean Validation API
Spring使用适配器模式将Spring Validation与Bean Validation API集成起来LocalValidatorFactoryBean是一个org.springframework.validation.Validator,内部使用一个jakarta.validation.Validator的实现(一般是Hibernate)从而支持注解形式的验证API,它同时也是一个FactoryBean,因此可以通过IoC容器管理@Validated是一个Spring额外提供的注解,比起@Valid,它提供分组功能,分组使用方法和Bean Validation API里的groups属性类似和
Spring MVC的联动:在方法参数中使用@Valid或@Validated或其它的注解约束,由容器会自动进行校验,并将抛出的异常赋给BindingResult对象自动注入也可定义
@ExceptionHandler方法处理