欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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ǔ)知識 - JSR 380,也稱為Bean Validation 2.0。

當(dāng)然,驗(yàn)證用戶輸入在大多數(shù)應(yīng)用程序中是一個(gè)超常見的要求,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的屬性滿足特定的標(biāo)準(zhǔn)。

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

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

依賴性

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

驗(yàn)證API

根據(jù)JSR 380規(guī)范,validation-api依賴包含標(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)。

要使用它,我們必須添加以下依賴項(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>

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

表達(dá)式語言依賴關(guān)系

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

要解析這些表達(dá)式,我們必須在表達(dá)式語言API和該API的實(shí)現(xiàn)上添加依賴項(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:無法加載'javax.el.E??xpressionFactory'。檢查您是否在類路徑上有EL依賴項(xiàng),或使用ParameterMessageInterpolator

使用注解驗(yàn)證

我們將在這里使用User bean作為主要示例,并為其添加一些簡單的驗(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注釋:

  • @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屬性對所有屬性都是通用的。這是當(dāng)相應(yīng)屬性的值未通過驗(yàn)證時(shí)通常會呈現(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)證日期值是否過去,包括現(xiàn)在; 可以應(yīng)用于日期類型,包括Java 8中添加的日期類型
  • @Future和@FutureOrPresent - 驗(yàn)證日期值是否將來包括現(xiàn)在

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

List<@NotBlank String> preferences;

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

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

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

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

程序驗(yàn)證

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

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

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

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

定義Bean

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

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

驗(yàn)證Bean

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

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

通過迭代違規(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的資料請關(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ù)雜查詢sql語句該怎么寫

    java中復(fù)雜查詢sql語句該怎么寫

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

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

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

    MyBatis集成Spring流程詳解

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

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

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

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

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

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

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

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

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

    java多線程讀寫文件示例

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

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

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

最新評論