最近研究基于注解的参数校验时接触了一些新的概念,整理一下。
Bean Validation
Bean Validation是一整套关于数据验证的规范,JSR 303–Bean Validation规范。
Bean Validation定义了一系列元数据模型和API。Hibernate Validator是Bean Validation的参考实现,除了JSR 303规范中内置约束,还额外定义一些常用约束实现。
Bean Validation中的约束
常用:
- @Null
- @NotNull
少用:
- @Min(value)
- @Max(value)
- @Size(max, min)
- @Pattern(value)
- @Length
- @Range
- @NotEmpty
未用:
- @AssertTrue
- @AssertFalse
- @Past
- @Future
- @Digits (integer, fraction)
- @DecimalMin(value)
- @DecimalMax(value)
在代码中校验
如下代码,其中validator可以从SpringBoot Context中获取,我已经验证过了。
ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
Validator validator = factory.getValidator();
Set<ConstraintViolation<DemoDTO>> violations = validator.validate(dto);
Bean Validation、Hibernate Validation、spring-boot-starter-validation关系
Bean Validation是Java中的一项标准,它通过一些注解表达了对实体的限制规则。通过提出了一些API和扩展性的规范,这个规范是没有提供具体实现的,希望能够Constrain once, validate everywhere。现在它已经发展到了2.0,兼容Java8。
Hibernate Validation实现了Bean Validation标准,里面还增加了一些注解,在程序中引入它我们就可以直接使用。
Spring MVC也支持Bean Validation,它对Hibernate Validation进行了二次封装,添加了自动校验,并将校验信息封装进了特定的BindingResult类中,org.springframework.boot:spring-boot-starter-validation
引入这个库,实现对bean的校验功能。
参考资料
-
讲述了Bean Validation与Hibernate Validation之间的关系,包含一些自定义Validator的代码及一些以编程的方式校验的代码。另外这篇文章的参考文档质量非常高,我有时间想去研究一下。