Bean Validation

最近研究基于注解的参数校验时接触了一些新的概念,整理一下。

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)
  • @Email
  • @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的校验功能。

参考资料

  1. spring boot 参数校验这么做简洁实用

  2. SpringBoot自定义请求参数校验

    讲述了Bean Validation与Hibernate Validation之间的关系,包含一些自定义Validator的代码及一些以编程的方式校验的代码。另外这篇文章的参考文档质量非常高,我有时间想去研究一下。