91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

參數校驗Spring的@Valid注解有什么用

發布時間:2021-08-05 09:51:07 來源:億速云 閱讀:171 作者:小新 欄目:開發技術

小編給大家分享一下參數校驗Spring的@Valid注解有什么用,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

參數校驗Spring的@Valid注解

@Valid 注解通常用于對象屬性字段的規則檢測。

以新增一個員工為功能切入點,以常規寫法為背景,慢慢烘托出 @Valid 注解用法詳解。

那么,首先,我們會有一個員工對象 Employee,如下 :

public class Employee { 
    /** 姓名 */
    public String name;
 
    /** 年齡 */
    public Integer age;
 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
 
    public Integer getAge() {
        return age;
    }
 
    public void setAge(Integer age) {
        this.age = age;
    } 
}

然后 Cotroller 中會有一個對應都新增方法 add():

@Controller
public class TestController { 
    @RequestMapping("/add")
    @ResponseBody
    public String add(Employee employee) {
        // TODO 保存到數據庫
        return "新增員工成功";
    } 
}

需求變更,要求員工名稱不能為空,且長度不超過10個字符

我們的原始寫法:

參數校驗Spring的@Valid注解有什么用

現在規定年齡也是必填項,且范圍在1到100歲,那么此時,我們需要增加判定

參數校驗Spring的@Valid注解有什么用

現在員工對象 Employee 就 2 個字段,我們就寫了 10 多行的代碼驗證,要是有20個字段,豈不是要寫 100 多行代碼?

如何解決呢?

將驗證過程抽成一個驗證方法:

參數校驗Spring的@Valid注解有什么用

但這種方式只是抽了一個方法,有一種換湯不換藥的感覺,雖然業務方法看起來清爽了很多,但書寫代碼量并沒有下降,反而還多出了一個方法。

此時引出 Spring 的 @valid 注解即可:

首先,我們在 Maven 配置中引入 @valid 的依賴:

如果你是 springboot 項目,那么可以不用引入了,已經引入了,他就存在于最核心的 web 開發包里面。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <version>2.0.5.RELEASE</version>
</dependency>

代碼優化

首先在 Employee 類的屬性上打上如下注解:

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull; 
import org.hibernate.validator.constraints.Length;
import org.hibernate.validator.constraints.Range;
public class Employee {
 
    /** 姓名 */
    @NotBlank(message = "請輸入名稱")
    @Length(message = "名稱不能超過個 {max} 字符", max = 10)
    public String name;
 
    /** 年齡 */
    @NotNull(message = "請輸入年齡")
    @Range(message = "年齡范圍為 {min} 到 {max} 之間", min = 1, max = 100)
    public Integer age;
 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
 
    public Integer getAge() {
        return age;
    }
 
    public void setAge(Integer age) {
        this.age = age;
    } 
}

然后再 Controller 對應方法上,對這個員工標上 @Valid 注解,表示我們對這個對象屬性需要進行驗證

參數校驗Spring的@Valid注解有什么用

用一個東西來存放驗證結果,做法也很簡單,在參數直接添加一個BindingResult:

參數校驗Spring的@Valid注解有什么用

對應獲取驗證結果的代碼如下:

參數校驗Spring的@Valid注解有什么用

@Valid與@Validated注解

之前項目中參數的校驗,都是自己寫的判斷方法進行校驗,這次采用了spring提供的注解進行參數的校驗,更為的方便,簡潔。

@Valid:常見用在方法,類中字段上進行校驗

參數校驗Spring的@Valid注解有什么用

參數校驗Spring的@Valid注解有什么用

@Validated:是spring提供的對@Valid的封裝,常見用在方法上進行校驗

參數校驗Spring的@Valid注解有什么用

定義的校驗類型

@Null 驗證對象是否為null

@NotNull 驗證對象是否不為null, 無法查檢長度為0的字符串

@NotBlank 檢查約束字符串是不是Null還有被Trim的長度是否大于0,只對字符串,且會去掉前后空格.

@NotEmpty 檢查約束元素是否為NULL或者是EMPTY.

@CreditCardNumber信用卡驗證

@Email 驗證是否是郵件地址,如果為null,不進行驗證,算通過驗證。

@URL(protocol=,host=, port=,regexp=, flags=) ip地址校驗

Booelan檢查

@AssertTrue 驗證 Boolean 對象是否為 true

@AssertFalse 驗證 Boolean 對象是否為 false

長度檢查

@Size(min=, max=) 驗證對象(Array,Collection,Map,String)長度是否在給定的范圍之內

@Length(min=, max=) Validates that the annotated string is between min and max included.
日期檢查

@Past 驗證 Date 和 Calendar 對象是否在當前時間之前

@Future 驗證 Date 和 Calendar 對象是否在當前時間之后

@Pattern 驗證 String 對象是否符合正則表達式的規則

數值檢查,建議使用在Stirng,Integer類型,不建議使用在int類型上,因為表單值為""時無法轉換為int,但可以轉換為Stirng為"",Integer為null

@Min 驗證 Number 和 String 對象是否大等于指定的值

@Max 驗證 Number 和 String 對象是否小等于指定的值

@DecimalMax 被標注的值必須不大于約束中指定的最大值. 這個約束的參數是一個通過BigDecimal定義的最大值的字符串表示.小數存在精度

@DecimalMin 被標注的值必須不小于約束中指定的最小值. 這個約束的參數是一個通過BigDecimal定義的最小值的字符串表示.小數存在精度

@Digits 驗證 Number 和 String 的構成是否合法

@Digits(integer=,fraction=) 驗證字符串是否是符合指定格式的數字,interger指定整數精度,fraction指定小數精度。

@Range(min=, max=) Checks whether the annotated value lies between (inclusive) the specified minimum and maximum.
注意的幾點:

(1)如果一個bean中包含第二個bean

這時要檢驗第二個bean中某個字段,即嵌套校驗,必須要在第一個bean對象中使用@Valid標注到表示第二個bean對象的字段上,然后再第二個bean對象里面的字段上加上校驗類型

參數校驗Spring的@Valid注解有什么用

參數校驗Spring的@Valid注解有什么用

(2)@Validated支持分組注解

1、先定義一個空接口:GroupA

參數校驗Spring的@Valid注解有什么用

2、對bean對象中校驗類型,添加分組信息,這里我對version字段進行了分組校驗信息添加

參數校驗Spring的@Valid注解有什么用

3、方法入參中進行分組信息添加

參數校驗Spring的@Valid注解有什么用

參數校驗Spring的@Valid注解有什么用

如上圖所示,則shelveProject方法由于添加了分組信息會校驗DeleteProjectRequest對象中的version字段是否為空,而offShelveProject方法沒有添加分組信息,不會校驗version是否為空。

@Validated沒有添加groups屬性時,默認驗證沒有分組的驗證屬性。

以上是“參數校驗Spring的@Valid注解有什么用”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

西盟| 绥德县| 永顺县| 铜鼓县| 湘潭县| 宁都县| 翁牛特旗| 霸州市| 镇安县| 灵川县| 福清市| 于田县| 崇州市| 靖州| 分宜县| 桃源县| 福海县| 金山区| 汶上县| 永胜县| 黄大仙区| 德化县| 武夷山市| 大足县| 上林县| 英德市| 龙门县| 保靖县| 安溪县| 杭锦后旗| 嵊州市| 东乌珠穆沁旗| 虹口区| 固安县| 卓尼县| 雅安市| 桓台县| 霍林郭勒市| 大同县| 新龙县| 新巴尔虎右旗|