<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                # Hibernate 驗證器 – Java Bean 驗證示例 > 原文: [https://howtodoinjava.com/hibernate/hibernate-validator-java-bean-validation/](https://howtodoinjava.com/hibernate/hibernate-validator-java-bean-validation/) 使用 **Hiberate 驗證器**驗證 Java bean 字段的 Java 示例。 **Bean 驗證 API 2** (`JSR-380`)提供了一些流行的注解,可以將這些注解附加到每個 Bean 屬性,以保持數據完整性。 ## 1\. Maven 依賴 以下是必需的 **Hiberate 驗證器 maven 依賴項**。 Bean 驗證允許錯誤消息中包含表達式。 要解析這些表達式,我們必須添加對表達式語言 API 以及該 API 實現的依賴。 我使用 Jboss 的`javax.el`中實現的`javax.el-api`規范添加了它們。 ```java <!-- Java bean validation API - Spec --> <dependency> <groupId>javax.validation</groupId> <artifactId>validation-api</artifactId> <version>2.0.1.Final</version> </dependency> <!-- Hibernate validator - Bean validation API Implementation --> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-validator</artifactId> <version>6.0.11.Final</version> </dependency> <!-- Verify validation annotations usage at compile time --> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-validator-annotation-processor</artifactId> <version>6.0.11.Final</version> </dependency> <!-- Unified Expression Language - Spec --> <dependency> <groupId>javax.el</groupId> <artifactId>javax.el-api</artifactId> <version>3.0.1-b06</version> </dependency> <!-- Unified Expression Language - Implementation --> <dependency> <groupId>org.glassfish.web</groupId> <artifactId>javax.el</artifactId> <version>2.2.6</version> </dependency> ``` ## 2\. Hibernate 驗證器示例 #### 2.1 帶有驗證注解的模型 ```java package com.howtodoinjava.example.model; import javax.validation.constraints.Email; import javax.validation.constraints.NotEmpty; import javax.validation.constraints.NotNull; import javax.validation.constraints.Size; public class User { @NotNull(message = "Please enter id") private Long id; @Size(max = 20, min = 3, message = "{user.name.invalid}") @NotEmpty(message = "Please enter name") private String name; @Email(message = "{user.email.invalid}") @NotEmpty(message = "Please enter email") private String email; public User(Long id, String name, String email) { super(); this.id = id; this.name = name; this.email = email; } //Setters and Getters } ``` #### 2.2 消息屬性 默認情況下,所有消息都是從類路徑中的`ValidationMessages.properties`文件解析的。 如果文件不存在,則不會發生[消息解析](https://howtodoinjava.com/spring-core/resolving-text-messages-in-spring-resourcebundlemessagesource-example/)。 ```java user.name.invalid=Invalid Username user.email.invalid=Invalid Email ``` #### 2.3 執行驗證 現在,讓我們在`User`實例上執行 bean 驗證。 ```java package com.howtodoinjava.example; import java.util.Set; import javax.validation.ConstraintViolation; import javax.validation.Validation; import javax.validation.Validator; import javax.validation.ValidatorFactory; import com.howtodoinjava.example.model.User; public class TestHibernateValidator { public static void main(String[] args) { //Create ValidatorFactory which returns validator ValidatorFactory factory = Validation.buildDefaultValidatorFactory(); //It validates bean instances Validator validator = factory.getValidator(); User user = new User(null, "1", "abcgmail.com"); //Validate bean Set<ConstraintViolation<User>> constraintViolations = validator.validate(user); //Show errors if (constraintViolations.size() > 0) { for (ConstraintViolation<User> violation : constraintViolations) { System.out.println(violation.getMessage()); } } else { System.out.println("Valid Object"); } } } ``` 程序輸出: ```java Please enter id Invalid Email Invalid Username ``` ## 3\. 自定義資源包 默認情況下,框架從[類路徑](https://howtodoinjava.com/java/basics/java-set-classpath-command-line-examples/)中的`ValidationMessages.properties`文件中提取驗證消息。 您可以如下配置自己的**自定義屬性文件**。 將這兩個文件放在類路徑中,即`messages.properties`和`otherMessages.properties`。 現在,將從這兩個屬性文件解析所有消息。 ```java Validator validator = Validation.byDefaultProvider() .configure() .messageInterpolator( new ResourceBundleMessageInterpolator( new AggregateResourceBundleLocator( Arrays.asList( "messages", "otherMessages" ) ) ) ) .buildValidatorFactory() .getValidator(); ``` ## 4\. 消息插值 #### 4.1 郵件參數解析 在消息解析期間,可以使用運行時值使驗證消息更有意義。 消息中的**參數值解析以兩種方式發生:** 1. 要解析注解屬性中的值,只需將大括號括起來即可。 例如。 `{min}`或`{max}`。 2. 要解析字段的運行時值,請使用占位符`${validatedValue}`。 #### 4.2)參數解析示例 * 帶有消息和參數的屬性文件。 ```java user.name.invalid='${validatedValue}' is an invalid name. It must be minimum {min} chars and maximum {max} chars. ``` * 帶有驗證注解的 Bean 字段。 ```java @Size(max = 20, min = 3, message = "{user.name.invalid}") private String name; ``` * 程序輸出中已解決的消息。 ```java User user = new User(23l, "xy", "abc@gmail.com"); Set<ConstraintViolation<User>> constraintViolations = validator.validate(user); //Output 'xy' is an invalid name. It must be minimum 3 chars and maximum 20 chars. ``` ## 5\. Hiberate 驗證器注解 現在,當我們知道如何以編程方式使用 Hiberate 驗證器時。 讓我們看一下可以在 bean 類中使用的所有注解。 #### 5.1 Bean 驗證注解 | 注解 | 描述 | | --- | --- | | `@Digits(integer=, fraction=)` | 檢查注解的值是否為最多`integer`位和`fractional`小數位的數字。 | | `@Email` | 檢查指定的字符序列是否為有效的電子郵件地址。 | | `@Max(value=)` | 檢查帶注解的值是否小于或等于指定的最大值。 | | `@Min(value=)` | 檢查帶注解的值是否大于或等于指定的最小值 | | `@NotBlank` | 檢查帶注解的字符序列不為空,并且修剪后的長度大于 0。 | | `@NotEmpty` | 檢查帶注解的元素是否不為`null`或為空。 | | `@Null` | 檢查帶注解的值是否為空 | | `@NotNull` | 檢查帶注解的值不為空 | | `@Pattern(regex=, flags=)` | 考慮給定的`flag`匹配項,檢查帶注解的字符串是否與正則表達式`regex`匹配 | | `@Size(min=, max=)` | 檢查帶注解的元素的大小是否在最小和最大(包括)之間 | | `@Negative` | 檢查元素是否嚴格為負。 零值被視為無效。 | | `@NegativeOrZero` | 檢查元素是負數還是零。 | | `@Future` | 檢查帶注解的日期是否是將來的日期。 | | `@FutureOrPresent` | 檢查帶注解的日期是現在還是將來。 | | `@PastOrPresent` | 檢查帶注解的日期是過去還是現在。 | #### 5.2 Hiberate 驗證器特定的注解 除了 Bean 驗證 API 定義的約束之外,Hibernate 驗證器還提供了以下有用的自定義約束。 | 注解 | 描述 | | --- | --- | | `@CreditCardNumber( ignoreNonDigitCharacters=)` | 檢查帶注解的字符序列是否通過了 [Luhn 校驗和](https://en.wikipedia.org/wiki/Luhn_algorithm)測試。 請注意,此驗證旨在檢查用戶錯誤,而不是信用卡有效性! | | `@Currency(value=)` | 檢查帶注解的`javax.money.MonetaryAmount`的貨幣單位是否為指定貨幣單位的一部分。 | | `@EAN` | 檢查帶注解的字符序列是否為有效的 [EAN](https://en.wikipedia.org/wiki/International_Article_Number_%28EAN%29) 條形碼。 默認值為 EAN-13。 | | `@ISBN` | 檢查帶注解的字符序列是否為有效的 [ISBN](https://en.wikipedia.org/wiki/International_Standard_Book_Number) 。 | | `@Length(min=, max=)` | 驗證帶注解的字符序列是否在`min`和`max`之間。 | | `@Range(min=, max=)` | 檢查帶注解的值是否介于(包括)指定的最小值和最大值之間。 | | `@UniqueElements` | 檢查帶注解的集合僅包含唯一元素。 | | `@URL` | 根據 RFC2396 檢查帶注解的字符序列是否為有效 URL。 | 將我的問題放在評論部分。 學習愉快! 參考文獻: [Bean 驗證 2.0](https://beanvalidation.org/) [Hiberate 驗證器注解處理器](http://hibernate.org/validator/tooling/)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看