SpringBoot參數(shù)校驗(yàn)示例詳解
SpringBoot自帶了validation工具可以從后端對前端傳來的參數(shù)進(jìn)行校驗(yàn),用法如下:
首先得添加依賴
<!-- 參數(shù)校驗(yàn) -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
一、簡單數(shù)據(jù)類型校驗(yàn)
1.1 編寫相關(guān)Controller
@Validated
@RestController
public class TestController {
@GetMapping("/t1")
// name不能為空
public String t1(@NotBlank String name){
System.out.println(name);
return name;
}
}
在要開啟參數(shù)校驗(yàn)的類上方添加Validated注解,代表該類開啟參數(shù)校驗(yàn),訪問http://localhost:8080/t1,發(fā)現(xiàn)當(dāng)沒有傳來參數(shù)時,會拋出 ConstraintViolationException 異常。 接下來讓我們測試一下啪
1.2 測試結(jié)果

可以看到不能為空,表示t1路徑下第一個參數(shù)不能為空,接下來我們輸入?yún)?shù)看看

如果我們不想輸出這種提示信息,我們還可以自定義提示信息,這時就要在注解添加message屬性,屬性值代表錯誤信息
public String t1(@NotBlank(message = "名字不能為空") String name){
System.out.println(name);
return name;
}
再運(yùn)行看看

這樣就正常了。
二、異常處理
好嘍,在上面我們可以看到異常頁面不太好看,這樣我們可以配置自定義的程序出現(xiàn)錯誤跳轉(zhuǎn)的錯誤頁面。
當(dāng)拋出 ConstraintViolationException 異常后,我們可以使用SpringMVC的異常處理器,也可以使用SpringBoot自帶的異常處理機(jī)制。
當(dāng)程序出現(xiàn)了異常,SpringBoot會使用自帶的 BasicErrorController 對象處理異常。該處理器會默認(rèn)跳轉(zhuǎn)到/resources/templates/error.html頁面。
2.1 錯誤頁面
<!DOCTYPE HTML>
<html>
<head>
<meta charset="UTF-8">
<title>錯誤頁面</title>
</head>
<body>
<h1>服務(wù)器開小差了~</h1>
</body>
</html>
2.2 測試結(jié)果

OK,可以正常顯示錯誤頁面
三、參數(shù)校驗(yàn)相關(guān)注解
參數(shù)校驗(yàn)相關(guān)注解
| 注解 | 作用 |
|---|---|
| @NotNull | 判斷包裝類是否為null |
| @NotBlank | 判斷字符串是否為null或者是空串(去掉首尾空格) |
| @NotEmpty | 判斷集合是否為空 |
| @Length | 判斷字符的長度(最大或者最小) |
| @Min | 判斷數(shù)值最小值 |
| @Max | 判斷數(shù)值最大值 |
| 判斷郵箱是否合法 |
3.1 測試Controller
@RequestMapping("/t2")
public String t2(@NotBlank @Length(min = 1,max = 5) String name,
@NotNull @Min(0) @Max(150) Integer age,
@NotEmpty @RequestParam List<String> address,
@NotBlank @Email String email){
System.out.println(name);
System.out.println(age);
System.out.println(address);
System.out.println(email);
return "請求成功";
}OK,我們這個測試方法主要就是有四個參數(shù),第一個name不能為空,且長度最小為1且不能超過5,第二個參數(shù)是年齡age,最小值為0且不能超過150, 第三個參數(shù)值就是address,這是一個集合,不能為空,第四個參數(shù)是郵箱,郵箱格式也要正確。
3.2 測試結(jié)果
OK,接下來我們測試一下什么都沒有輸入,直接測試

接下來輸入如下圖

四、對象類型參數(shù)校驗(yàn)
SpringBoot也可以校驗(yàn)對象參數(shù)中的每個屬性,用法如下:
4.1 添加實(shí)體類
package com.example.springbootdemo4.pojo;
import jakarta.validation.constraints.Max;
import jakarta.validation.constraints.Min;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
public class Student {
@NotBlank(message = "姓名不能為空")
private String name;
@NotNull(message = "年齡不能沒有") @Min(6) @Max(18)
private Integer age;
public Student() {
}
public Student(String name, Integer age) {
this.name = name;
this.age = 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;
}
@Override
public String toString() {
return "Student [" +
"name='" + name + '\'' +
", age=" + age +
" ]";
}
}4.2 添加測試方法
@RequestMapping("/t3")
public String t3(@Validated Student student, BindingResult brs){
// 判斷是否有參數(shù)異常
if(brs.hasErrors()){
// 所有參數(shù)異常
List<ObjectError> list = brs.getAllErrors();
// 遍歷參數(shù)異常輸出信息
list.forEach(System.out::println);
return "參數(shù)異常";
}
System.out.println(student);
return "success";
}4.3 測試結(jié)果


可以看到控制臺輸出可以識別到,

Ok,這里亂碼是因?yàn)檫@個模塊的JDK版本較高,和項(xiàng)目版本不切合,但是我們可以知道他是表示年齡要在6-18的就好啦

到此這篇關(guān)于SpringBoot參數(shù)校驗(yàn)示例詳解的文章就介紹到這了,更多相關(guān)SpringBoot參數(shù)校驗(yàn)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- SpringBoot使用Validator進(jìn)行參數(shù)校驗(yàn)實(shí)戰(zhàn)教程(自定義校驗(yàn),分組校驗(yàn))
- SpringBoot中Controller的傳參方式詳細(xì)講解
- SpringBoot通過自定義注解實(shí)現(xiàn)參數(shù)校驗(yàn)
- springboot整合JSR303參數(shù)校驗(yàn)與全局異常處理的方法
- springboot接口參數(shù)校驗(yàn)JSR303的實(shí)現(xiàn)
- SpringBoot參數(shù)校驗(yàn)之@Valid的使用詳解
- SpringBoot參數(shù)校驗(yàn)之@Validated的使用詳解
相關(guān)文章
Spring Boot如何使用Spring Security進(jìn)行安全控制
要實(shí)現(xiàn)訪問控制的方法多種多樣,可以通過Aop、攔截器實(shí)現(xiàn),也可以通過框架實(shí)現(xiàn),本文將具體介紹在Spring Boot中如何使用Spring Security進(jìn)行安全控制。2017-04-04
Java與C++實(shí)現(xiàn)相同的MD5加密算法簡單實(shí)例
下面小編就為大家?guī)硪黄狫ava與C++實(shí)現(xiàn)相同的MD5加密算法簡單實(shí)例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-09-09
java操作mysql實(shí)現(xiàn)增刪改查的方法
這篇文章主要介紹了java操作mysql實(shí)現(xiàn)增刪改查的方法,結(jié)合實(shí)例形式分析了java操作mysql數(shù)據(jù)庫進(jìn)行增刪改查的具體實(shí)現(xiàn)技巧與相關(guān)注意事項(xiàng),需要的朋友可以參考下2017-05-05
啟動 Eclipse 彈出 Failed to load the JNI shared library jvm.dll
這篇文章主要介紹了有時候,新電腦上回碰到打開Eclipse時,彈出提示“Failed to load the JNI shared library jvm.dll”錯誤,這里給大家分享解決方案2016-08-08
Java開發(fā)環(huán)境不再需要配置classpath問題
這篇文章主要介紹了Java開發(fā)環(huán)境不再需要配置classpath問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-12-12

