HibernateValidator学习笔记
生活随笔
收集整理的這篇文章主要介紹了
HibernateValidator学习笔记
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
HibernateValidator學習筆記
前言
版本說明
hibernate-validator=6.1.5.Final相關鏈接:
- HibernateValidator 官網:http://hibernate.org/validator/
- HibernateValidator 官方文檔:http://hibernate.org/validator/documentation/getting-started/
- HibernateValidator maven 地址:https://mvnrepository.com/artifact/org.hibernate.validator/hibernate-validator
常用注解
注解中有個共同的屬性 message,可以自定義錯誤信息
| @NotNull | 值不能為空 |
| @Null | 值必須為空 |
| @Pattern(regex=) | 字符串必須匹配正則表達式 |
| @Size(min=, max=) | 集合元素的數量必須在min和max之間 |
| 字符串必須是Email地址 | |
| @Length(min=,max=) | 檢查字符串的長度 |
| @NotBlank | 檢查字符串不為null,并且長度大于0。 |
| @Range(min=,max=) | 數字必須大于等于min,小于等于max |
| @SafeHtml | 字符串是安全的html |
| @URL | 字符串是合法的URL |
| @AssertFalse | 值必須是false;支持的數據類型:Boolean,boolean |
| @AssertTrue | 值必須是true;支持的數據類型:Boolean,boolean |
| @DecimalMax(value=, inclusive=) | 值必須小于等于(inclusive=true)/小于(inclusive=false) value 屬性指定的值; 支持的數據類型:BigDecimal,BigInteger,CharSequence,byte,short,int,long和原始類型的相應的包裝; |
| @DecimalMin(value=, inclusive=) | 值必須大于等于(inclusive=true)/大于(inclusive=false) value 屬性指定的值; 支持的數據類型:BigDecimal,BigInteger,CharSequence,byte,short,int,long和原始類型的相應的包裝; |
| @Digits(integer=, fraction=) | 數字格式檢查,integer指定整數部分的最大長度,fraction指定小數部分的最大長度 支持的數據類型:``BigDecimal,BigInteger,CharSequence,byte,short,int,long`和原始類型的相應的包裝; |
| @Future | 值必須是未來的日期 |
| @FutureOrPresent | 檢查日期是現在還是將來 |
| @Past | 值必須是過去的日期 |
| @PastOrPresent | 檢查帶注釋的日期是過去還是現在 |
| @Max(value=) | 值必須小于等于value指定的值。 |
| @Min(value=) | 值必須大于等于value指定的值 |
| @Negative | 檢查元素是否嚴格為負。零值被視為無效。 支持的數據類型:BigDecimal,BigInteger,byte,short,int,long和原始類型的相應的包裝 |
| @NegativeOrZero | 檢查元素是負數或者零。 |
| @Positive | 檢查元素是否嚴格為正。零值被視為無效。 |
| @PositiveOrZero | 檢查元素是正數還是零。 |
核心pom依賴
<!-- https://mvnrepository.com/artifact/org.hibernate.validator/hibernate-validator --> <dependency><groupId>org.hibernate.validator</groupId><artifactId>hibernate-validator</artifactId><version>6.1.5.Final</version> </dependency> <!-- https://mvnrepository.com/artifact/org.glassfish/jakarta.el --> <dependency><groupId>org.glassfish</groupId><artifactId>jakarta.el</artifactId><version>3.0.3</version> </dependency> <!-- https://mvnrepository.com/artifact/javax.el/javax.el-api --> <dependency><groupId>javax.el</groupId><artifactId>javax.el-api</artifactId><version>3.0.0</version> </dependency>校驗 SpringMVC 入參校驗
校驗非 SpringMVC 入參校驗
pom.xml 依賴
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>top.simba1949</groupId><artifactId>hibernate-validator-learn</artifactId><version>1.0-SNAPSHOT</version><dependencies><!-- https://mvnrepository.com/artifact/org.hibernate.validator/hibernate-validator --><dependency><groupId>org.hibernate.validator</groupId><artifactId>hibernate-validator</artifactId><version>6.1.5.Final</version></dependency><!-- https://mvnrepository.com/artifact/org.glassfish/jakarta.el --><dependency><groupId>org.glassfish</groupId><artifactId>jakarta.el</artifactId><version>3.0.3</version></dependency><!-- https://mvnrepository.com/artifact/javax.el/javax.el-api --><dependency><groupId>javax.el</groupId><artifactId>javax.el-api</artifactId><version>3.0.0</version></dependency><!-- https://mvnrepository.com/artifact/org.projectlombok/lombok --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.12</version><scope>provided</scope></dependency><!-- https://mvnrepository.com/artifact/com.google.guava/guava --><dependency><groupId>com.google.guava</groupId><artifactId>guava</artifactId><version>29.0-jre</version></dependency></dependencies><build><plugins><!--https://mvnrepository.com/artifact/org.apache.maven.plugins/maven-compiler-plugin--><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.8.1</version><configuration><source>1.8</source><target>1.8</target><encoding>UTF-8</encoding></configuration></plugin></plugins></build> </project>參數校驗
User.java
package top.simba1949.model;import lombok.Data;import javax.validation.constraints.NotNull; import javax.validation.constraints.Size;/*** @author Anthony* @date 2020/9/15 20:04*/ @Data public class User {@NotNull(message = "id不能為空")private Integer id;@Size(min = 2, max = 8, message = "用戶名必須在2~8個字符區間內")@NotNull(message = "用戶名必須不能為空")private String username; }參數校驗測試
package top.simba1949;import top.simba1949.model.User;import javax.validation.ConstraintViolation; import javax.validation.Validation; import javax.validation.Validator; import javax.validation.ValidatorFactory; import java.util.Set;/*** @author Anthony* @date 2020/9/15 19:22*/ public class Application {public static void main(String[] args) {User user = new User();user.setId(1);user.setUsername("123456789");// Validator從中檢索對象ValidatorFactory。// 一個Validator 實例是線程安全的,可重復使用多次。// 因此,它可以安全地存儲在靜態字段中,并在測試方法中用于驗證不同的實例。ValidatorFactory factory = Validation.buildDefaultValidatorFactory();Validator validator = factory.getValidator();Set<ConstraintViolation<User>> violationSet = validator.validate(user);if (!violationSet.isEmpty()){throw new RuntimeException(violationSet.iterator().next().getMessage());}} }分組校驗
定義分組接口
package top.simba1949.model;/*** @author Anthony* @date 2020/9/15 22:41*/ public interface RoleInsert { } package top.simba1949.model;/*** @author Anthony* @date 2020/9/15 22:41*/ public interface RoleUpdate { }Role
package top.simba1949.model;import lombok.Data;import javax.validation.constraints.NotNull; import java.time.LocalDateTime;/*** @author Anthony* @date 2020/9/15 22:34*/ @Data public class Role {/*** groups 定義分組*/@NotNull(message = "id不能為空", groups = {RoleUpdate.class})private Integer id;@NotNull(message = "roleName不能為空", groups = {RoleInsert.class, RoleUpdate.class})private String roleName;@NotNull(message = "gmtCreate不能為空", groups = {RoleInsert.class})private LocalDateTime gmtCreate;@NotNull(message = "gmtModify不能為空", groups = {RoleUpdate.class})private LocalDateTime gmtModify; }參數校驗測試
package top.simba1949;import top.simba1949.model.*;import javax.validation.ConstraintViolation; import javax.validation.Validation; import javax.validation.Validator; import javax.validation.ValidatorFactory; import java.time.LocalDateTime; import java.util.Set;/*** @author Anthony* @date 2020/9/15 19:22*/ public class Application {public static void main(String[] args) {Role role = new Role();role.setId(1);role.setGmtModify(LocalDateTime.now());ValidatorFactory factory = Validation.buildDefaultValidatorFactory();Validator validator = factory.getValidator();// 分組校驗Set<ConstraintViolation<Role>> violationSet = validator.validate(role, RoleUpdate.class);if (!violationSet.isEmpty()){throw new RuntimeException(violationSet.iterator().next().getMessage());}} }自定義約束校驗
要創建自定義約束,需要執行以下三個步驟:
自定義注解并指定校驗邏輯類
package top.simba1949;import javax.validation.Constraint; import javax.validation.Payload; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target;/*** @author Anthony* @date 2020/9/15 22:54*/ @Target(value = {ElementType.FIELD, ElementType.METHOD}) @Retention(value = RetentionPolicy.RUNTIME) @Constraint(validatedBy = EmailConstraintValidator.class) public @interface EmailValidation {// message()、groups()、payload() 必須存在String message() default "";Class<?>[] groups() default { };Class<? extends Payload>[] payload() default { }; }自定義校驗邏輯類
package top.simba1949;import javax.validation.ConstraintValidator; import javax.validation.ConstraintValidatorContext;/*** @author Anthony* @date 2020/9/15 22:55*/ public class EmailConstraintValidator implements ConstraintValidator<EmailValidation, String> {/*** 初始化* @param constraintAnnotation*/@Overridepublic void initialize(EmailValidation constraintAnnotation) {System.out.println("init");}@Overridepublic boolean isValid(String value, ConstraintValidatorContext context) {if (null == value || value.length() == 0){return false;}final String emailFormat = "\\w[-\\w.+]*@([A-Za-z0-9][-A-Za-z0-9]+\\.)+[A-Za-z]{2,14}";return value.matches(emailFormat);} }參數校驗測試
package top.simba1949;import top.simba1949.model.User;import javax.validation.ConstraintViolation; import javax.validation.Validation; import java.util.Set;/*** @author Anthony* @date 2020/9/15 19:22*/ public class Application {public static void main(String[] args) {User user = new User();user.setId(1);user.setUsername("username");Set<ConstraintViolation<User>> violationSet = Validation.buildDefaultValidatorFactory().getValidator().validate(user);if (!violationSet.isEmpty()){throw new RuntimeException(violationSet.iterator().next().getMessage());}} }總結
以上是生活随笔為你收集整理的HibernateValidator学习笔记的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Armijo线搜索
- 下一篇: JVM调优工具的使用方法