一 校驗簡單資料類型
SpringBoot自帶了validation工具可以從後端對前端傳來的參數進行校驗,用法如下:
- 引入validation起步依賴
<!-- 參數校驗 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
- 編寫Controller
// 該控制器開啟參數校驗
@Validated
@Controller
public class TestController {
@RequestMapping("/t1")
@ResponseBody
// 在參數前加校驗注解,該注解的意思是字元串參數不能為null
public String t1(@NotBlank String username){
System.out.println(username);
return "請求成功!";
}
}
- 通路http://localhost:8080/t1,發現當沒有傳來參數時,會抛出ConstraintViolationException異常。
- 在校驗參數的注解中添加message屬性,可以替換異常資訊。
// 該控制器開啟參數校驗
@Validated
@Controller
public class TestController {
@RequestMapping("/t1")
@ResponseBody
// 在參數前加校驗注解,該注解的意思是字元串參數不能為null
public String t1(@NotBlank(message = "使用者名不能為空") String username){
System.out.println(username);
return "請求成功!";
}
}
二 校驗異常處理
當抛出ConstraintViolationException異常後,我們可以使用SpringMVC的異常處理器,也可以使用SpringBoot自帶的異常處理機制。
當程式出現了異常,SpringBoot會使用自帶的BasicErrorController對象處理異常。該處理器會預設跳轉到/resources/templates/error.html頁面。
編寫異常頁面:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>錯誤頁面</title>
</head>
<body>
<h1>伺服器開小差了!</h1>
</body>
</html>
三 校驗校驗相關注解
@NotNull 判斷包裝類是否為null
@NotBlank 判斷字元串是否為null或者是空串(去掉首尾空格)
@NotEmpty 判斷集合是否為空
@Length 判斷字元的長度(最大或者最小)
@Min 判斷數值最小值
@Max 判斷數值最大值
@Email 判斷郵箱是否合法
@RequestMapping("/t2")
@ResponseBody
public String t2(
@NotBlank @Length(min = 1, max = 5) String username,
@NotNull @Min(0) @Max(150) Integer age,
@NotEmpty @RequestParam List<String> address,
@NotBlank @Email String email) {
System.out.println(username);
System.out.println(age);
System.out.println(address);
System.out.println(email);
return "請求成功!";
}
四 校驗對象類型
- 添加實體類
public class Student {
@NotNull(message = "id不能為空")
private Integer id;
@NotBlank(message = "姓名不能為空")
private String name;
// 省略getter/setter/tostring
}
- 編寫控制器
@Controller
public class TestController2 {
@RequestMapping("/t3")
@ResponseBody
// 校驗的對象參數前添加@Validated,并将異常資訊封裝到BindingResult對象中
public String t3(@Validated Student student,BindingResult result) {
// 判斷是否有參數異常
if (result.hasErrors()) {
// 所有參數異常
List<ObjectError> list = result.getAllErrors();
// 周遊參數異常,輸出異常資訊
for (ObjectError err : list) {
FieldError fieldError = (FieldError) err;
System.out.println(fieldError.getDefaultMessage());
}
return "參數異常";
}
System.out.println(student);
return "請求成功!";
}
}