最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java?Bean?Validation使用示例詳解

 更新時間:2022年11月22日 15:50:08   作者:EdurtIO  
這篇文章主要為大家介紹了Java?Bean?Validation的使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

引言

使用標準框架驗證Java bean的基礎知識 - JSR 380,也稱為Bean Validation 2.0。

當然,驗證用戶輸入在大多數(shù)應用程序中是一個超常見的要求,Java Bean Validation框架已經(jīng)成為處理這種邏輯的事實上的標準。

JSR 380

JSR 380是用于bean驗證的Java API的規(guī)范,是JavaEE和JavaSE的一部分,它使用@NotNull、@Min和@Max等注釋確保bean的屬性滿足特定的標準。

此版本需要Java 8或更高版本,并利用Java 8中添加的新功能(如類型注釋),并支持Optional和LocalDate等新類型。

有關規(guī)范的完整信息,請繼續(xù)閱讀JSR 380

依賴性

我們將使用Maven示例來顯示所需的依賴項,但當然,可以使用各種方式添加這些jar。

驗證API

根據(jù)JSR 380規(guī)范,validation-api依賴包含標準驗證API:

<dependency>
    <groupId>javax.validation</groupId>
    <artifactId>validation-api</artifactId>
    <version>2.0.0.Final</version>
</dependency>

驗證API參考實現(xiàn)

Hibernate Validator是驗證API的參考實現(xiàn)。

要使用它,我們必須添加以下依賴項:

<dependency>
    <groupId>org.hibernate.validator</groupId>
    <artifactId>hibernate-validator</artifactId>
    <version>6.0.2.Final</version>
</dependency>
<dependency>
    <groupId>org.hibernate.validator</groupId>
    <artifactId>hibernate-validator-annotation-processor</artifactId>
    <version>6.0.2.Final</version>
</dependency>

這里快速說明的是,hibernate-validator完全獨立于Hibernate的持久性方面,并且通過將其添加為依賴項,我們不會將這些持久性方面添加到項目中。

表達式語言依賴關系

JSR 380提供對變量插值的支持,允許在違規(guī)消息中使用表達式。

要解析這些表達式,我們必須在表達式語言API和該API的實現(xiàn)上添加依賴項。GlassFish提供參考實現(xiàn):

<dependency>
    <groupId>javax.el</groupId>
    <artifactId>javax.el-api</artifactId>
    <version>3.0.0</version>
</dependency>
<dependency>
    <groupId>org.glassfish.web</groupId>
    <artifactId>javax.el</artifactId>
    <version>2.2.6</version>
</dependency>

如果未添加這些JAR,您將在運行時收到錯誤消息,如下所示:

HV000183:無法加載'javax.el.E??xpressionFactory'。檢查您是否在類路徑上有EL依賴項,或使用ParameterMessageInterpolator

使用注解驗證

我們將在這里使用User bean作為主要示例,并為其添加一些簡單的驗證:

import javax.validation.constraints.AssertTrue;
import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import javax.validation.constraints.Email;
public class User {
    @NotNull(message = "Name cannot be null")
    private String name;
    @AssertTrue
    private boolean working;
    @Size(min = 10, max = 200, message 
      = "About Me must be between 10 and 200 characters")
    private String aboutMe;
    @Min(value = 18, message = "Age should not be less than 18")
    @Max(value = 150, message = "Age should not be greater than 150")
    private int age;
    @Email(message = "Email should be valid")
    private String email;
    // standard setters and getters 
}

示例中使用的所有注釋都是標準的JSR注釋:

  • @NotNull - 驗證帶注釋的屬性值不為 null
  • @AssertTrue - 驗證帶注釋的屬性值是否為 true
  • @Size - 驗證帶注釋的屬性值是否具有屬性min和max之間的大小; 可以應用于String, Collection, Map和數(shù)組屬性
  • @Min - 驗證帶注釋的屬性的值是否小于value屬性
  • @Max - 驗證帶注釋的屬性的值是否大于value屬性
  • @Email - 驗證帶注釋的屬性是否為有效的電子郵件地址

某些注釋接受其他屬性,但message屬性對所有屬性都是通用的。這是當相應屬性的值未通過驗證時通常會呈現(xiàn)的消息。

可以在JSR中找到的一些其他注釋是:

  • @NotEmpty - 驗證屬性不為null或為空; 可以應用于String, Collection, Map或 Array值
  • @NotBlank - 只能應用于文本值,并驗證該屬性不是null或空格
  • @Positive和@PositiveOrZero - 適用于數(shù)值并驗證它們是嚴格正數(shù)還是正數(shù),包括0
  • @Negative和@NegativeOrZero - 適用于數(shù)值并驗證它們是嚴格為負數(shù),還是負數(shù),包括0
  • @Past和@PastOrPresent - 驗證日期值是否過去,包括現(xiàn)在; 可以應用于日期類型,包括Java 8中添加的日期類型
  • @Future和@FutureOrPresent - 驗證日期值是否將來包括現(xiàn)在

驗證注釋也可以應用于集合的元素:

List<@NotBlank String> preferences;

在這種情況下,將驗證添加到選項列表中的任何值。

該規(guī)范還支持 Java 8中的新Optional類型:

private LocalDate dateOfBirth;
public Optional<@Past LocalDate> getDateOfBirth() {
    return Optional.of(dateOfBirth);
}

在這里,驗證框架將自動解包LocalDate值并對其進行驗證。

程序驗證

一些框架 - 例如Spring--只需使用注釋就可以通過簡單的方法觸發(fā)驗證過程。這主要是為了使我們不必與程序驗證API進行交互。

現(xiàn)在讓我們進入手動路線并以編程方式設置:

ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
Validator validator = factory.getValidator();

要驗證bean,我們必須首先擁有Validator對象,該對象使用ValidatorFactory構造。

定義Bean

我們現(xiàn)在要設置一個無效用戶 - 使用空名稱值:

User user = new User();
user.setWorking(true);
user.setAboutMe("Its all about me!");
user.setAge(50);

驗證Bean

現(xiàn)在我們有了一個Validator,我們可以通過將它傳遞給validate方法來驗證我們的bean 。任何違反User對象中定義的約束的行為都將作為Set返回。

Set<ConstraintViolation<User>> violations = validator.validate(user);

通過迭代違規(guī),我們可以使用getMessage方法獲取所有違規(guī)消息。

for (ConstraintViolation<User> violation : violations) {
    log.error(violation.getMessage()); 
}

在我們的示例中(ifNameIsNull_nameValidationFails),該集合將包含一個ConstraintViolation,消息“ Name not not null”。

以上就是Java Bean Validation使用示例詳解的詳細內(nèi)容,更多關于Java Bean Validation的資料請關注腳本之家其它相關文章!

相關文章

  • Eclipse添加xml文件提示及Hibernate配置學習

    Eclipse添加xml文件提示及Hibernate配置學習

    文件提示功能在開發(fā)過程中很實用的,本文實現(xiàn)了一個Eclipse添加xml文件提示,感興趣的朋友可以了解下啊,希望本文對你有所幫助
    2013-01-01
  • 詳解java中BigDecimal精度問題

    詳解java中BigDecimal精度問題

    這篇文章主要介紹了java BigDecimal精度問題,對精確計算感興趣的同學,可以參考下
    2021-05-05
  • Java中關于字典樹的算法實現(xiàn)

    Java中關于字典樹的算法實現(xiàn)

    字典樹,又稱單詞查找樹,Trie樹,是一種樹形結構,哈希表的一個變種。用于統(tǒng)計,排序和保存大量的字符串,本文針對字典樹給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值
    2021-09-09
  • Java中關于String的兩種賦值方式

    Java中關于String的兩種賦值方式

    這篇文章主要介紹了Java中關于String的兩種賦值方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • Nacos框架服務注冊實現(xiàn)流程

    Nacos框架服務注冊實現(xiàn)流程

    這篇文章主要介紹了SpringCloud服務注冊之nacos實現(xiàn)過程,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-08-08
  • SpringBoot 圖書管理系統(tǒng)(刪除、強制登錄、更新圖書)詳細代碼

    SpringBoot 圖書管理系統(tǒng)(刪除、強制登錄、更新圖書)詳細代碼

    在企業(yè)開發(fā)中,通常不采用delete語句進行物理刪除,而是使用邏輯刪除,邏輯刪除通過修改標識字段來表示數(shù)據(jù)已被刪除,方便數(shù)據(jù)恢復,本文給大家介紹SpringBoot 圖書管理系統(tǒng)實例代碼,感興趣的朋友跟隨小編一起看看吧
    2024-09-09
  • IDEA設置生成帶注釋的getter和setter的圖文教程

    IDEA設置生成帶注釋的getter和setter的圖文教程

    通常我們用idea默認生成的getter和setter方法是不帶注釋的,當然,我們同樣可以設置idea像MyEclipse一樣生成帶有Javadoc的模板,具體設置方法,大家參考下本文
    2018-05-05
  • 詳細介紹Spring的配置文件

    詳細介紹Spring的配置文件

    這篇文章主要為大家詳細介紹了Spring中的配置文件的命名以及它的配置文件都有些什么。文中的示例代碼講解詳細,感興趣的小伙伴可以跟上小編一起學習一下
    2022-10-10
  • 講解Java設計模式編程中的建造者模式與原型模式

    講解Java設計模式編程中的建造者模式與原型模式

    這篇文章主要介紹了Java設計模式編程中的建造者模式與原型模式,設計模式有利于團隊開發(fā)過程中的代碼維護,需要的朋友可以參考下
    2016-02-02
  • Java實現(xiàn)克魯斯卡爾算法的示例代碼

    Java實現(xiàn)克魯斯卡爾算法的示例代碼

    克魯斯卡爾算法是一種用于求解最小生成樹問題的貪心算法。這篇文章主要為大家詳細介紹了Java實現(xiàn)克魯斯卡爾算法的方法,需要的可以參考一下
    2023-04-04

最新評論

双峰县| 高台县| 桐城市| 陈巴尔虎旗| 安平县| 定南县| 克拉玛依市| 新竹县| 沾化县| 西藏| 横峰县| 邵阳市| 洛隆县| 景德镇市| 开平市| 陆丰市| 富平县| 璧山县| 瓮安县| 保山市| 小金县| 江口县| 阳春市| 芜湖县| 三明市| 黎城县| 页游| 赤城县| 阿勒泰市| 大荔县| 余干县| 泽普县| 连城县| 彭阳县| 清远市| 贡山| 安顺市| 杭锦旗| 夹江县| 凉城县| 醴陵市|