HibernateValidator学习笔记
生活随笔
收集整理的這篇文章主要介紹了
HibernateValidator学习笔记
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
HibernateValidator學(xué)習(xí)筆記
前言
版本說(shuō)明
hibernate-validator=6.1.5.Final相關(guān)鏈接:
- HibernateValidator 官網(wǎng):http://hibernate.org/validator/
- HibernateValidator 官方文檔:http://hibernate.org/validator/documentation/getting-started/
- HibernateValidator maven 地址:https://mvnrepository.com/artifact/org.hibernate.validator/hibernate-validator
常用注解
注解中有個(gè)共同的屬性 message,可以自定義錯(cuò)誤信息
| @NotNull | 值不能為空 |
| @Null | 值必須為空 |
| @Pattern(regex=) | 字符串必須匹配正則表達(dá)式 |
| @Size(min=, max=) | 集合元素的數(shù)量必須在min和max之間 |
| 字符串必須是Email地址 | |
| @Length(min=,max=) | 檢查字符串的長(zhǎng)度 |
| @NotBlank | 檢查字符串不為null,并且長(zhǎng)度大于0。 |
| @Range(min=,max=) | 數(shù)字必須大于等于min,小于等于max |
| @SafeHtml | 字符串是安全的html |
| @URL | 字符串是合法的URL |
| @AssertFalse | 值必須是false;支持的數(shù)據(jù)類型:Boolean,boolean |
| @AssertTrue | 值必須是true;支持的數(shù)據(jù)類型:Boolean,boolean |
| @DecimalMax(value=, inclusive=) | 值必須小于等于(inclusive=true)/小于(inclusive=false) value 屬性指定的值; 支持的數(shù)據(jù)類型:BigDecimal,BigInteger,CharSequence,byte,short,int,long和原始類型的相應(yīng)的包裝; |
| @DecimalMin(value=, inclusive=) | 值必須大于等于(inclusive=true)/大于(inclusive=false) value 屬性指定的值; 支持的數(shù)據(jù)類型:BigDecimal,BigInteger,CharSequence,byte,short,int,long和原始類型的相應(yīng)的包裝; |
| @Digits(integer=, fraction=) | 數(shù)字格式檢查,integer指定整數(shù)部分的最大長(zhǎng)度,fraction指定小數(shù)部分的最大長(zhǎng)度 支持的數(shù)據(jù)類型:``BigDecimal,BigInteger,CharSequence,byte,short,int,long`和原始類型的相應(yīng)的包裝; |
| @Future | 值必須是未來(lái)的日期 |
| @FutureOrPresent | 檢查日期是現(xiàn)在還是將來(lái) |
| @Past | 值必須是過(guò)去的日期 |
| @PastOrPresent | 檢查帶注釋的日期是過(guò)去還是現(xiàn)在 |
| @Max(value=) | 值必須小于等于value指定的值。 |
| @Min(value=) | 值必須大于等于value指定的值 |
| @Negative | 檢查元素是否嚴(yán)格為負(fù)。零值被視為無(wú)效。 支持的數(shù)據(jù)類型:BigDecimal,BigInteger,byte,short,int,long和原始類型的相應(yīng)的包裝 |
| @NegativeOrZero | 檢查元素是負(fù)數(shù)或者零。 |
| @Positive | 檢查元素是否嚴(yán)格為正。零值被視為無(wú)效。 |
| @PositiveOrZero | 檢查元素是正數(shù)還是零。 |
核心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>校驗(yàn) SpringMVC 入?yún)⑿r?yàn)
校驗(yàn)非 SpringMVC 入?yún)⑿r?yàn)
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>參數(shù)校驗(yàn)
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個(gè)字符區(qū)間內(nèi)")@NotNull(message = "用戶名必須不能為空")private String username; }參數(shù)校驗(yàn)測(cè)試
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從中檢索對(duì)象ValidatorFactory。// 一個(gè)Validator 實(shí)例是線程安全的,可重復(fù)使用多次。// 因此,它可以安全地存儲(chǔ)在靜態(tài)字段中,并在測(cè)試方法中用于驗(yàn)證不同的實(shí)例。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());}} }分組校驗(yàn)
定義分組接口
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; }參數(shù)校驗(yàn)測(cè)試
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();// 分組校驗(yàn)Set<ConstraintViolation<Role>> violationSet = validator.validate(role, RoleUpdate.class);if (!violationSet.isEmpty()){throw new RuntimeException(violationSet.iterator().next().getMessage());}} }自定義約束校驗(yàn)
要?jiǎng)?chuàng)建自定義約束,需要執(zhí)行以下三個(gè)步驟:
自定義注解并指定校驗(yàn)邏輯類
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 { }; }自定義校驗(yàn)邏輯類
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);} }參數(shù)校驗(yàn)測(cè)試
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());}} }總結(jié)
以上是生活随笔為你收集整理的HibernateValidator学习笔记的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Armijo线搜索
- 下一篇: JVM调优工具的使用方法