参考文档
Hibernate Validator – Java Bean Validation Example: https://howtodoinjava.com/hibernate/hibernate-validator-java-bean-validation/
@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) { ... } }