01 引入参数校验依赖
使用前需要先引入参数校验依赖,此外,作为springboot web项目来测试,还需要引入lombok和spring-boot-starter-web依赖。
<dependencies>
...
<!--参数校验依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
...
</dependencies>
02 编写表单对象
此处分别使用了注解:
- @NotBlank 参数不能为null、空字符串、空白字符串
- @Length 限制参数长度在一定范围
- @Email 限制参数为邮箱格式
public class TestForm {
@NotBlank(message = "用户名不能为空")// 不能为null、空字符串、空白字符串
private String username;
@Length(min=6, max=12, message = "密码长度需在6至12位")
private String password;
@NotBlank(message = "邮箱不能为空")
@Email(message = "邮箱格式不合法")
private String email;
}
03 Controller入参使用@Valid注解
在方法的输入参数(表单)前加@Valid
注解,表示该参数使用参数校验。
@RestController
public class DemoController {
// 演示参数校验 异常会被全局异常处理捕获
@GetMapping("test")
public String test(@RequestBody @Valid TestForm form){
String str = form.toString();
System.out.println(str);
return str;
}
}
04 使用全局异常处理捕获异常
捕获BindException异常:
// 全局异常处理
@RestControllerAdvice
public class GlobalExceptionHandler {
// 1.捕获参数校验异常
@ExceptionHandler(BindException.class)
public String handleBindException(BindException e) {
BindingResult bindingResult = e.getBindingResult();// 获取异常体
List<FieldError> errors = bindingResult.getFieldErrors();// 从异常体中获取所有异常列表
StringBuilder messageBuilder = new StringBuilder();// 要返回的字符串
for (FieldError error : errors){
String field = error.getField();// 报错的参数
String message = error.getDefaultMessage();// 报错的信息
messageBuilder.append(field).append("\t").append(message).append("\n");// 拼接
}
return messageBuilder.toString();
}
// 2.捕获自定义异常
...
// 3.兜底捕获异常
...
}
05 测试
使用postman等工具进行测试。
// 正确的请求参数
{
"username": "Silas103",
"password": "12345678",
"email": "Silas103@163.com"
}
错误的请求参数及响应结果:
更多内容可参考:JSR303介绍和使用