参考文档

Hibernate Validator – Java Bean Validation Example: https://howtodoinjava.com/hibernate/hibernate-validator-java-bean-validation/

https://docs.spring.io/spring-boot/docs/2.1.8.BUILD-SNAPSHOT/reference/html/boot-features-validation.html

@Validated@Valid的区别

简单来讲,@Validated支持分组校验,@Valid不支持分组校验。

国际化支持

在resource下面建好这三个文件,即可按照语言类型返回不同的提示

ValidationMessages.properties

ValidationMessages_en_US.properties

ValidationMessages_zh_CN.properties

 校验内容填写

username.size=用户名称的长度必须为5-16位

注释使用

@Size(min=5, max=16, message="{username.size}")

 validation-api-2.0.1.Final.jar

布尔校验

@AssertFalse和@AssertTrue(boolean、Boolean)

带注释的元素必须为false或true。

空校验

@Null(任何类型)

验证对象是否为空,可以接受任何类型。

@NotNull(任何类型)

验证对象不为空,可以接受任何类型。

@NotBlank(CharSequence的接口)

验证注解的元素值不为空(不为null、去除首位空格后长度为0),不同于@NotEmpty、@NotBlank只应用于字符串且在比较时会去除字符串的首位空格。

数组校验

@NotEmpty(CharSequence接口、Collection接口、Map接口、Array类型)

验证对象不为null,或者集合不为空。

@Size(CharSequence接口、Collection接口、Map接口、Array类型)

验证对象长度,可支持CharSequence(评估字符序列的长度)、Collection(评估集合大小)、Map(评估Map大小)、Array(计算数组长度)

min:元素长度最小值

max:元素长度最大值

数值校验

可接受的参数为BigDecimal、BigInteger和byte、short、int、long以及它们的包装类

@Min和@Max(最小和最大值)

带注释的元素必须是一个数字,其值必须大于或等于指定的最小值/最大值。

注:不可使用在float和double类型上

@DecimalMax/@DecimalMin(最小和最大值)

value:最小或最大值

inclusive:是否包含最小或最大值

验证值是否小于等于最大指定小数值或大于等于最小指定小数值

数值格式校验

可接受的参数为BigDecimal、BigInteger和byte、short、int、long以及它们的包装类

@Digits(校验整数和小数的位数范围)

integer(整数部分), fraction(小数部分)

带注释的元素必须是可接受范围内的数字。

@Digits(integer = 10, fraction = 2, message = "样式参考:100.00")

整数校验

整数类型可接受的值为:BigDecimal、BigInteger和byte、short、int、long以及它们的包装类

@Positive(正数)

@PositiveOrZero(正数或零)

@Negative(负数)

@NegativeOrZero(负数或零)

日期约束校验

日期元素支持的是Date、Calendar、Instant、LocalDate、LocalDateTime、LocalTime、MonthDay、OffsetDateTime、OffsetTime、Year、YearMonth、ZonedDateTime、chrono.HijrahDate、JapaneseDate、MinguoDate、ThaiBuddhistDate类型

@Future(未来的即时,日期或时间)

@FutureOrPresent(现在或将来的即时,日期或时间)

@Past(过去的即时,日期或时间)

@PastOrPresent(过去或现在的即时,日期或时间)

特殊

@Pattern(正则)

使用正则校验

可输入参数

1. 字符串

// 同时验证国内固话和手机号码
@Pattern(regexp = "^(0\\d{2,3}(-)?\\d{7,8})|([1][1-9][0-9]{9})$", message = "请输入有效的电话")
// 同时验证国际固话和手机号码
@Pattern(regexp = "^((\\+\\d{2}-)?0\\d{2,3}-\\d{7,8})|([1][1-9][0-9]{9})$", message = "请输入有效的电话")

@Email(邮箱)

可输入参数

1. 字符串

@Email(message = "请输入有效的邮箱")

@Valid(类的级联校验)

通过在属性上添加@Valid注解就可以进行级联校验了

class Car {
  @NotNull
  private String manufacturer;
  @Valid
  private Driver driver;

  // getter setter
}

 

hibernate-validator-6.0.17.Final.jar

@UniqueElements(元素是否唯一)

可接受元素为实现了Collection接口的类。

验证提供的{@link Collection}中的每个对象都是唯一的,即我们在集合中找不到2个相等的元素。

@Length(字符串长度)

验证字符串是否包含在最小值和最大值之间

可输入参数

1. 字符串

@Length(min = 0, max = 500, message = "内容长度为0-500字")

@URL

@SafeHtml

@Currency(货币单位是否为指定货币单位的一部分)

在方法上使用校验

允许bean方法在其参数和/或返回值上使用javax.validation约束进行注释。 具有这种带注释方法的目标类需要在类型级别使用@Validated注释进行注释,以便搜索内联约束注释的方法。

@Service
@Validated
public class MyBean {
    public Archive findByCodeAndAuthor(@Size(min = 8, max = 10) String code,
            Author author) {
        ...
    }
}