日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

HibernateValidator学习笔记

發布時間:2023/12/16 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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字符串必須是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 入參校驗

  • 在實體類字段添加校驗注解
  • 在controller層添加@Valid 注解使之生效
  • package top.simba1949.controller;import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import top.simba1949.common.Person;import javax.validation.Valid;/*** @Author Theodore* @Date 2019/12/2 17:50*/ @Slf4j @RestController @RequestMapping("person") public class PersonController {/*** 添加注解 @Valid,才能使實體類Person的校驗注解生效* @param person* @return*/@PostMappingpublic String insert(@Valid @RequestBody Person person){log.debug("person is {}", person);return "SUCCESS";} }

    校驗非 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());}} }

    自定義約束校驗

    要創建自定義約束,需要執行以下三個步驟:

  • 自定義注解并指定校驗邏輯類
  • 自定義校驗邏輯類,實現 ConstraintValidator<A extends Annotation, T> 接口,填寫具體的校驗邏輯
  • 和 HibernateValidator 原生注解一樣使用即可
  • 自定義注解并指定校驗邏輯類

    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学习笔记的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。