springboot参数校验
引入依赖
1 |
|
测试使用类
统一返回结果
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
27public class JsonResult {
private boolean status;
private int code;
private String msg;
private Object data;
public JsonResult(boolean status, int code, String msg, Object data) {
this.status = status;
this.code = code;
this.msg = msg;
this.data = data;
}
public static JsonResult success(Object data) {
return new JsonResult(true, 0, null, data);
}
public static JsonResult fail(String msg) {
return fail(-1, msg);
}
public static JsonResult fail(int code, String msg) {
return new JsonResult(false, code, msg, null);
}
// getter setter ...
}用户类
1
2
3
4
5
6
7
8
9
10
11
12public class User {
@Length(min = 5, max = 10, message = "用户名长度不合法")
@NotNull(message = "用户名不能为空")
private String username;
@Length(min = 6, max = 16, message = "密码长度不合法")
@NotNull(message = "密码不能为空")
private String password;
// getter setter ...
}
测试
- controller
1 |
|
- 测试
测试post请求
请求:post http://localhost:8080/login
参数:{“username”:”admin”, “password”:”123”}
返回结果:{“status”:false,”code”:-1,”msg”:”密码长度不合法”,”data”:null}测试get请求
请求:get http://localhost:8080/getLogin?username=admin&password=123
返回结果:{“status”:false,”code”:-1,”msg”:”密码长度不合法”,”data”:null}测试请求方法中校验
请求:get http://localhost:8080/getUser
返回结果:springboot默认的错误信息
统一异常处理
- 异常处理
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@RestControllerAdvice
public class GlobalExceptionHandler {
/**
* post请求参数校验抛出的异常
*/
@ExceptionHandler(MethodArgumentNotValidException.class)
public JsonResult methodArgumentNotValidExceptionHandler(MethodArgumentNotValidException e){
//获取异常中随机一个异常信息
String defaultMessage = e.getBindingResult().getFieldError().getDefaultMessage();
return JsonResult.fail(defaultMessage);
}
/**
* get请求参数校验抛出的异常
*/
@ExceptionHandler(BindException.class)
public JsonResult bindExceptionHandler(BindException e){
//获取异常中随机一个异常信息
String defaultMessage = e.getBindingResult().getFieldError().getDefaultMessage();
return JsonResult.fail(defaultMessage);
}
/**
* 请求方法中校验抛出的异常
*/
@ExceptionHandler(ConstraintViolationException.class)
public JsonResult constraintViolationExceptionHandler(ConstraintViolationException e){
//获取异常中第一个错误信息
String message = e.getConstraintViolations().iterator().next().getMessage();
return JsonResult.fail(message);
}
}
将所有的校验异常都在异常统一处理后,controller参数中就可以不写BindingResult
- controller
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22@RestController
@Validated
public class UserBetterController {
@PostMapping("/login")
public JsonResult login(@Validated @RequestBody User user){
return JsonResult.success("登陆成功");
}
@GetMapping("/getLogin")
public JsonResult getLogin(@Validated User user){
return JsonResult.success("登陆成功");
}
@GetMapping("/getUser")
public JsonResult getUser(@NotNull(message = "用户名不能为空") String username){
User user = new User();
user.setUsername(username);
user.setPassword("123456");
return JsonResult.success(user);
}
}
分组校验
创建用于分组的接口
1
2
3
4
5//校验添加角色校验
public interface Add {}
//校验修改角色校验
public interface Update {}创建一个测试分组的实体类
1 |
|
- 创建测试controller
1 |
|
- 测试
测试添加角色
请求:get http://localhost:8080/add
返回结果:{“status”:false,”code”:400,”msg”:”添加角色必须有name”,”data”:null}测试修改角色
请求:get http://localhost:8080/update
返回结果:{“status”:false,”code”:400,”msg”:”修改角色必须有id”,”data”:null}
自定义校验注解
- 创建自定义校验注解
1 |
|
- 创建校验注解的类
1 |
|
- 测试
1 |
|
请求:get http://localhost:8080/sendPhone?phone=123
返回结果:{“status”:false,”code”:400,”msg”:”手机号格式错误”,”data”:null}