SpringBoot引數校驗機制之一:基本驗證概念
引言
在實際專案開發中,我們會對Controller層接收到的引數進行基本的校驗,本文主要介紹SpringBoot專案中使用註解對輸入引數進行初步規則校驗的方法。本文將從以下幾個方面進行闡述。
- Rest請求方式
- 校驗框架
- 常用的引數校驗註解
- 程式碼示例
一、Rest請求方式
在當下的WEB後臺開發模式下,基本都採用了前後臺分離的開放方式。所謂前後臺分離就是後臺給前段返回統一的JSON格式資料,前端通過解析JSON資料將後臺處理的資料展示在頁面。前端呼叫Rest風格的後臺介面。
Get請求
一般用於頁面展示資料的查詢操作,不涉及資料庫資料的變化。常用的Controller層註解為@GetMapping。POST請求
提交資料到後臺服務,需要修改伺服器中的資料。提交的資料放在HTTP請求中的訊息體重。常用的Controller層註解為@PostMapping。DELETE請求
主要通過HTTP請求刪除指定URL伺服器資源。常見返回的狀態碼包括:
(1)200(OK):刪除成功,同時返回刪除的資源。
(2)202 (Accepted) : 刪除請求已經接受,但沒有被立即執行。
(3)204 (No Content) - 刪除請求已經被執行,但是沒有返回資源(也許是請求刪除不存在的資源造成的)。PUT請求
主要用於通過HTTP請求的方式ge更改伺服器資源,常見的返回狀態碼包括:
(1)200 (OK): 已存在資源被更改。
(2)201 (created):如果新資源被建立。
二、校驗框架
在日常開發工作中,對於Controller層接收的引數進行校驗的時候可以通過程式碼來進行,但是這些校驗操作與具體的業務無關,可以通過抽象一個校驗工具類的方法實現,但是總會覺得這部分程式碼糅合在程式碼中顯得臃腫不實用。同時也不能保證驗證引數的有效性。Hibernate validator提供了一套基於註解的引數驗證機制,它可以與現有框架進行有機整合。spring-boot-starter-web包裡面有hibernate-validator包,不需要引用hibernate validator依賴,因為該包中已經包含了hibernate-validator包的引用。
<dependency >
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
三、常用的引數校驗註解
以下表格是一些常用校驗註解的說明。
@Null | 限制只能為null |
---|---|
@NotNull | 限制必須不為null |
@AssertFalse | 限制必須為false |
@AssertTrue | 限制必須為true |
@Max(value) | 限制必須為一個不大於指定值的數字 |
@Min(value) | 限制必須為一個不小於指定值的數字 |
@NotBlank | 驗證註解的元素值不為空(不為null、去除首位空格後長度為0),不同於@NotEmpty,@NotBlank只應用於字串且在比較時會去除字串的空格 |
@NotEmpty | 驗證註解的元素值不為null且不為空(字串長度不為0、集合大小不為0) |
驗證註解的元素值是Email,也可以通過正則表示式和flag指定自定義的email格式 | |
@Range | 驗證欄位的範圍,最小值到最大值 |
四、程式碼示例
public class StudentDto {
@NotNull(message = "field is null")
private String name;
@NotNull(message = "field is null")
@Max(100)
private int age;
@NotNull(message = "field is null")
private boolean sexuality;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public boolean isSexuality() {
return sexuality;
}
public void setSexuality(boolean sexuality) {
this.sexuality = sexuality;
}
}