Spring--Spring校验

Posted jazon@

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring--Spring校验相关的知识,希望对你有一定的参考价值。

Spring校验使用场景

  • Spring常规校验
  • Spring数据绑定
  • SpringWeb参数绑定
  • SpringWebMVC/SpringWebFlux处理方法参数校验

Validator接口设计

  • 接口的职责: Spring内部校验器接口,通过编程的方式校验目标对象
  • 核心方法
supports(Class): 校验目标类能否校验
validate(Object, Errors): 校验目标对象,并将校验失败的内容输出至Errors对象
  • 配套组件
错误收集器: org.springframework.validation.Errors
Validator工具类: org.springframework.validation.ValidationUtils

Error接口设计

  • 接口职责:数据绑定和校验错误收集接口,与Java Bean和其属性有强关联性, Error的实现类会关联一个javabean,因为接口定义了能获取bean的指定属性
Errors errors = new BeanPropertyBindingResult(user, "user");
  • 核心方法
  1. reject方法:收集错误文案
/**
 * Register a global error for the entire target object,
 * using the given error description.
 * @param errorCode error code, interpretable as a message key
*/
void reject(String errorCode);
2.rejectValue方法(重载):收集对象字段中的错误文案
/**
	 * Register a field error for the specified field of the current object
	 * (respecting the current nested path, if any), using the given error
	 * description.
	 * <p>The field name may be @code null or empty String to indicate
	 * the current object itself rather than a field of it. This may result
	 * in a corresponding field error within the nested object graph or a
	 * global error if the current object is the top object.
	 * @param field the field name (may be @code null or empty String)
	 * @param errorCode error code, interpretable as a message key
	 * @see #getNestedPath()
	 */
void rejectValue(@Nullable String field, String errorCode);
  • 配套组件

1.Java Bean错误描述: org.springframework.validation.ObjectError
2.Java Bean属性错误描述: org.springframework.validation.FieldError

Errors文案来源

  • Errors文案生成步骤

1.选择Errors实现
2.调用reject或rejectValue方法
3.获取Errors对象中ObjectError或FieldError
4.将ObjectError或FieldError中的code和args,关联MessageSource实现(如:ResourceBundleMessageSource)

自定义Validator

  • 实现org.springframework.validation.Validator接口

1.实现supports方法
2.实现validate方法、

Validator的救赎

  • Bean Validation与Validator适配: Spring并没有对JSR-303进行实现,它要依赖于其他实现,比如hibernate Validator。
  • 核心组件: org.springframework.validation.beanvalidation.LocalValidatorFactoryBean
  • 依赖Bean Validation-JSR-303 或 JSR-349的实现
  • Bean方法参数校验-org.springframework.validation.beanvalidation.MethodValidationPostProcessor,这个类继承

AbstractBeanFactoryAwareAdvisingPostProcessor的,它会对类级别上使用@Validated标注的生成代理,从而使得方法调用能被校验。

以上是关于Spring--Spring校验的主要内容,如果未能解决你的问题,请参考以下文章

Spring框架系列 - Spring和Spring框架组成

Spring全家桶笔记:Spring+Spring Boot+Spring Cloud+Spring MVC

学习笔记——Spring简介;Spring搭建步骤;Spring的特性;Spring中getBean三种方式;Spring中的标签

Spring--Spring入门

深度解析Spring源码编译Spring源码(spring5.2.x版本)

Spring:Spring介绍