SpringBoot数据校验
# SpringBoot数据校验
步骤
- 导入校验包
- JavaBean 编写校验注解
- 使用 @Valid 告诉 SpringMVC 进行校验,效果:如果校验不通过,目标方法不执行
- 编写一个全局异常处理器,处理 MethodArgumentNotValidException(),封装校验结果
# 案例
pom.xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
User类
@Data
public class User {
private Integer id;
@NotBlank(message = "姓名不能为空")
private String name;
@NotNull(message = "年龄不能为空")
@Max(value = 150, message = "年龄不能超过150岁")
@Min(value = 0, message = "年龄不能小于0岁")
private Integer age;
@Email(message = "邮箱格式不正确")
private String email;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
UserController
@RestController
public class UserController {
@PostMapping("/user")
public R add(@RequestBody @Valid User user){
System.out.println("进行保存操作。。。");
return R.ok();
}
}
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
GlobalExceptionHandler
// 全局异常处理器
@RestControllerAdvice
public class GlobalExceptionHandler {
/**
* 进行前端数据校验异常处理,给前端返回统一格式
*
* {
* "code": 500,
* "msg": "校验失败",
* "data": {
* "name": "姓名不能为空",
* "age": "年龄不能超过150"
* }
* }
*/
@ExceptionHandler(value = MethodArgumentNotValidException.class)
public R methodArgumentNotValidException(MethodArgumentNotValidException ex) {
//1、result 中封装了所有错误信息
BindingResult result = ex.getBindingResult();
List<FieldError> errors = result.getFieldErrors();
Map<String, String> map = new HashMap<>();
for (FieldError error : errors) {
String field = error.getField();
String message = error.getDefaultMessage();
map.put(field, message);
}
return R.failed(map, "参数错误");
}
// 最终的兜底
@ExceptionHandler(Throwable.class)
public R error(Throwable e) {
System.out.println("【全局】 - Exception处理" + e.getClass());
return R.failed(e.getMessage());
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
Last Updated: 2025/12/02, 11:22:00