我們后臺使用`spring` 為我們提供好的統一校驗的工具`spring-boot-starter-validation`對請求進行校驗。
```xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
```
這里通過注解封裝了幾種常用的校驗
- `@NotNull` 不能為null
- `@NotEmpty` 不能為null、空字符串、空集合
- `@NotBlank` 不能為null、空字符串、純空格的字符串
- `@Min` 數字最小值不能小于x
- `@Max` 數字最大值不能大于x
- `@Email` 字符串為郵件格式
- `@Max` 數字最大值不能大于x
- `@Size` 字符串長度最小為x、集合長度最小為x
- `@Pattern` 正則表達式
我們以`SysUser`為例,看看怎么使用
```java
public class SysUser implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 用戶ID
*
*/
@TableId
private Long userId;
/**
* 用戶名
*/
@NotBlank(message="用戶名不能為空")
@Size(min = 2,max = 20,message = "用戶名長度要在2-20之間")
private String username;
/**
* 密碼
*/
@JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
private String password;
/**
* 郵箱
*/
@NotBlank(message="郵箱不能為空")
@Email(message="郵箱格式不正確")
private String email;
/**
* 手機號
*/
@Pattern(regexp="0?1[0-9]{10}",message = "請輸入正確的手機號")
private String mobile;
/**
* 狀態 0:禁用 1:正常
*/
private Integer status;
/**
* 用戶所在店鋪id
*/
private Long shopId;
/**
* 角色ID列表
*/
@TableField(exist=false)
private List<Long> roleIdList;
/**
* 創建時間
*/
private Date createTime;
}
```
我們在Controller層使用該bean,并使用`@Valid`注解,使校驗的注解生效,如`SysUserController` :
```java
@RestController
@RequestMapping("/sys/user")
public class SysUserController {
/**
* 保存用戶
*/
@SysLog("保存用戶")
@PostMapping
@PreAuthorize("@pms.hasPermission('sys:user:save')")
public ResponseEntity<String> save(@Valid @RequestBody SysUser user){
String username = user.getUsername();
SysUser dbUser = sysUserService.getOne(new LambdaQueryWrapper<SysUser>()
.eq(SysUser::getUsername, username));
if (dbUser!=null) {
return ResponseEntity.badRequest().body("該用戶已存在");
}
user.setShopId(SecurityUtils.getSysUser().getShopId());
user.setPassword(passwordEncoder.encode(user.getPassword()));
sysUserService.saveUserAndUserRole(user);
return ResponseEntity.ok().build();
}
}
```
并且在`DefaultExceptionHandlerConfig` 攔截由`@Valid` 觸發的異常信息并返回:
```java
@Controller
@RestControllerAdvice
public class DefaultExceptionHandlerConfig {
@ExceptionHandler(BindException.class)
public ResponseEntity<String> bindExceptionHandler(BindException e){
e.printStackTrace();
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(e.getBindingResult().getFieldErrors().get(0).getDefaultMessage());
}
@ExceptionHandler(MethodArgumentNotValidException.class)
public ResponseEntity<String> methodArgumentNotValidExceptionHandler(MethodArgumentNotValidException e){
e.printStackTrace();
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(e.getBindingResult().getFieldErrors().get(0).getDefaultMessage());
}
}
```
- 開發環境準備
- 基本開發手冊
- 項目目錄結構
- 權限管理
- 通用分頁表格
- Swagger文檔
- undertow容器
- 對xss攻擊的防御
- 分布式鎖
- 統一的系統日志
- 統一驗證
- 統一異常處理
- 文件上傳下載
- 一對多、多對多分頁
- 認證與授權
- 從授權開始看源碼
- 自己寫個授權的方法-開源版
- 商城表設計
- 商品信息
- 商品分組
- 購物車
- 訂單
- 地區管理
- 運費模板
- 接口設計
- 必讀
- 購物車的設計
- 訂單設計-確認訂單
- 訂單設計-提交訂單
- 訂單設計-支付
- 生產環境
- nginx安裝與跨域配置
- 安裝mysql
- 安裝redis
- 傳統方式部署項目
- docker
- 使用docker部署商城
- centos jdk安裝
- docker centos 安裝
- Docker Compose 安裝與卸載
- docker 鏡像的基本操作
- docker 容器的基本操作
- 通過yum安裝maven
- 常見問題