亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Java?Bean?Validation使用示例詳解

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

引言

使用標(biāo)準(zhǔn)框架驗(yàn)證Java bean的基礎(chǔ)知識(shí) - JSR 380,也稱(chēng)為Bean Validation 2.0。

當(dāng)然,驗(yàn)證用戶(hù)輸入在大多數(shù)應(yīng)用程序中是一個(gè)超常見(jiàn)的要求,Java Bean Validation框架已經(jīng)成為處理這種邏輯的事實(shí)上的標(biāo)準(zhǔn)。

JSR 380

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

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

有關(guān)規(guī)范的完整信息,請(qǐng)繼續(xù)閱讀JSR 380。

依賴(lài)性

我們將使用Maven示例來(lái)顯示所需的依賴(lài)項(xiàng),但當(dāng)然,可以使用各種方式添加這些jar。

驗(yàn)證API

根據(jù)JSR 380規(guī)范,validation-api依賴(lài)包含標(biāo)準(zhǔn)驗(yàn)證API:

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

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

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

要使用它,我們必須添加以下依賴(lài)項(xiàng):

<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>

這里快速說(shuō)明的是,hibernate-validator完全獨(dú)立于Hibernate的持久性方面,并且通過(guò)將其添加為依賴(lài)項(xiàng),我們不會(huì)將這些持久性方面添加到項(xiàng)目中。

表達(dá)式語(yǔ)言依賴(lài)關(guān)系

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

要解析這些表達(dá)式,我們必須在表達(dá)式語(yǔ)言API和該API的實(shí)現(xiàn)上添加依賴(lài)項(xiàng)。GlassFish提供參考實(shí)現(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,您將在運(yùn)行時(shí)收到錯(cuò)誤消息,如下所示:

HV000183:無(wú)法加載'javax.el.E??xpressionFactory'。檢查您是否在類(lèi)路徑上有EL依賴(lài)項(xiàng),或使用ParameterMessageInterpolator

使用注解驗(yàn)證

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

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 
}

示例中使用的所有注釋都是標(biāo)準(zhǔn)的JSR注釋?zhuān)?/p>

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

某些注釋接受其他屬性,但message屬性對(duì)所有屬性都是通用的。這是當(dāng)相應(yīng)屬性的值未通過(guò)驗(yàn)證時(shí)通常會(huì)呈現(xiàn)的消息。

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

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

驗(yàn)證注釋也可以應(yīng)用于集合的元素:

List<@NotBlank String> preferences;

在這種情況下,將驗(yàn)證添加到選項(xiàng)列表中的任何值。

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

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

在這里,驗(yàn)證框架將自動(dòng)解包LocalDate值并對(duì)其進(jìn)行驗(yàn)證。

程序驗(yàn)證

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

現(xiàn)在讓我們進(jìn)入手動(dòng)路線(xiàn)并以編程方式設(shè)置:

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

要驗(yàn)證bean,我們必須首先擁有Validator對(duì)象,該對(duì)象使用ValidatorFactory構(gòu)造。

定義Bean

我們現(xiàn)在要設(shè)置一個(gè)無(wú)效用戶(hù) - 使用空名稱(chēng)值:

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

驗(yàn)證Bean

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

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

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

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

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

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

相關(guān)文章

  • Java中jqGrid 學(xué)習(xí)筆記整理——進(jìn)階篇(二)

    Java中jqGrid 學(xué)習(xí)筆記整理——進(jìn)階篇(二)

    這篇文章主要介紹了Java中jqGrid 學(xué)習(xí)筆記整理——進(jìn)階篇(二)的相關(guān)資料,需要的朋友可以參考下
    2016-04-04
  • java中復(fù)雜查詢(xún)sql語(yǔ)句該怎么寫(xiě)

    java中復(fù)雜查詢(xún)sql語(yǔ)句該怎么寫(xiě)

    我們知道在java連接數(shù)據(jù)庫(kù)之后,需要數(shù)據(jù)庫(kù)的sql語(yǔ)句,下面這篇文章主要給大家介紹了關(guān)于java中復(fù)雜查詢(xún)sql語(yǔ)句該怎么寫(xiě)的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-11-11
  • 淺析Java異常處理中斷言的使用

    淺析Java異常處理中斷言的使用

    這篇文章主要介紹了Java異常處理中斷言的使用,是Java入門(mén)學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-09-09
  • MyBatis集成Spring流程詳解

    MyBatis集成Spring流程詳解

    在實(shí)際開(kāi)發(fā)中不僅僅是要展示數(shù)據(jù),還要構(gòu)成數(shù)據(jù)模型添加數(shù)據(jù),這篇文章主要介紹了SpringBoot集成Mybatis操作數(shù)據(jù)庫(kù),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • java正則替換sql中的參數(shù)實(shí)例代碼

    java正則替換sql中的參數(shù)實(shí)例代碼

    這篇文章主要給大家介紹了關(guān)于java正則替換sql中參數(shù)的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2022-10-10
  • SpringBoot使用ip2region獲取地理位置信息的方法

    SpringBoot使用ip2region獲取地理位置信息的方法

    這篇文章主要介紹了SpringBoot使用ip2region獲取地理位置信息的相關(guān)知識(shí),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-06-06
  • 詳解Java執(zhí)行g(shù)roovy腳本的兩種方式

    詳解Java執(zhí)行g(shù)roovy腳本的兩種方式

    這篇文章主要介紹了Java執(zhí)行g(shù)roovy腳本的兩種方式,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-04-04
  • Java?axios與spring前后端分離傳參規(guī)范總結(jié)

    Java?axios與spring前后端分離傳參規(guī)范總結(jié)

    這篇文章主要介紹了Java?axios與spring前后端分離傳參規(guī)范總結(jié),文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的朋友可以參考一下
    2022-08-08
  • java多線(xiàn)程讀寫(xiě)文件示例

    java多線(xiàn)程讀寫(xiě)文件示例

    這篇文章主要介紹了java多線(xiàn)程讀寫(xiě)文件示例,需要的朋友可以參考下
    2014-04-04
  • Java 自定義線(xiàn)程池和線(xiàn)程總數(shù)控制操作

    Java 自定義線(xiàn)程池和線(xiàn)程總數(shù)控制操作

    這篇文章主要介紹了Java 自定義線(xiàn)程池和線(xiàn)程總數(shù)控制操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-02-02

最新評(píng)論