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

Java?Bean?Validation使用示例詳解

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

引言

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

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

JSR 380

JSR 380是用于bean驗證的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示例來顯示所需的依賴項,但當(dāng)然,可以使用各種方式添加這些jar。

驗證API

根據(jù)JSR 380規(guī)范,validation-api依賴包含標(biāo)準(zhǔn)驗證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的持久性方面,并且通過將其添加為依賴項,我們不會將這些持久性方面添加到項目中。

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

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

要解析這些表達(dá)式,我們必須在表達(dá)式語言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,您將在運(yùn)行時收到錯誤消息,如下所示:

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 
}

示例中使用的所有注釋都是標(biāo)準(zhǔn)的JSR注釋:

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

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

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

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

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

List<@NotBlank String> preferences;

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

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

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

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

程序驗證

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

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

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

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

定義Bean

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

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使用示例詳解的詳細(xì)內(nèi)容,更多關(guān)于Java Bean Validation的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Eclipse添加xml文件提示及Hibernate配置學(xué)習(xí)

    Eclipse添加xml文件提示及Hibernate配置學(xué)習(xí)

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

    詳解java中BigDecimal精度問題

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

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

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

    Java中關(guān)于String的兩種賦值方式

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

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

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

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

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

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

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

    詳細(xì)介紹Spring的配置文件

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

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

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

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

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

最新評論

民丰县| 格尔木市| 新兴县| 汨罗市| 岢岚县| 娱乐| 绍兴市| 来宾市| 正镶白旗| 渝中区| 绥芬河市| 恩平市| 万源市| 西吉县| 景洪市| 石景山区| 桐乡市| 乡宁县| 容城县| 连南| 景泰县| 太仆寺旗| 顺平县| 平安县| 西城区| 南投市| 崇州市| 永顺县| 安图县| 平罗县| 衡南县| 五河县| 柞水县| 临高县| 丹东市| 简阳市| 正阳县| 长阳| 老河口市| 高碑店市| 沙坪坝区|