1. 场景
一个请求往往会传入许多参数,但是都需要进行校验,但是总不能把所有参数进行 if 校验,这非常繁琐,我们可以使用注解更简单的实现
2. 注解进行校验
- 对传入的实体类的字段加入注解
public class Student {
@NotNull(message = "姓名为null")
@NotEmpty(message = "姓名不能为空字符串")
private String name;
@NotNull(message = "分数不能为null")
@Min(value = 0, message = "分数只能在0到100之间")
@Max(value = 100, message = "分数只能在0到100之间")
private Integer score;
@NotNull(message = "手机号不能为null")
@NotEmpty(message = "手机号不能为空字符串")
@Length(min = 11, max = 11, message = "手机号长度只能为11位")
private String mobile;
}
- 在对象入口处加入
@Vaild
注解
@PostMapping("addStudent")
public String addStudent(@RequestBody @Valid Student student){
return null;
}
- 发送请求的时候就会报 400 的错误
3. 配置全局统一异常拦截器
上述返回的信息太复杂,我们可以配置统一异常拦截器,简化返回的错误信息
@ControllerAdvice
@ResponseBody
public class GlobalExceptionInterceptor {
@ExceptionHandler(value = Exception.class)
public String exceptionHandler(HttpServletRequest request, Exception e){
String failMsg = null;
if(e instanceof MethodArgumentNotValidException){
failMsg = ((MethodArgumentNotValidException) e).getBindingResult().getFieldError().getDefaultMessage();
}
return failMsg;
}
}
- 直接返回错误信息