首先,这是一个spingboot工程,springboot默认内置了hibernate-validator验证包,如下图所示:
我们需要对student类中的字段进行验证,hibernate-validator常用注解请参考以下链接
https://blog.csdn.net/dh554112075/article/details/80790464
我们定义Student类,get、set方法省略
@Min(value = 20,message = "最小值为20")
@Max(value = 100,message = "最大值为100")
@NotNull(message = "年龄不能为空")
private Integer age;
@NotBlank(message = "名字不能为空")
private String name;
@Length(max = 3,min = 3,message = "号码必须要3位")
private String number;
在controller中使用@Valid表示我要对这个对象进行参数校验
@GetMapping("/addStudent")
public Object addStudent(@Valid Student student){
return "success";
}
其实到这已经成功,但是参数校验失败的校验信息不好看,所以我们自定义一个全局异常拦截器
- @ControllerAdvice可以拦截所有加@RequestMapping的方法
- @ExceptionHandler表示处理那种类型的异常
@ControllerAdvice
public class GlobalExceptionInterceptor {
@ExceptionHandler(value = Exception.class)
@ResponseBody
public Object exceptionHander(HttpServletRequest request,Exception e){
List returnlist = new ArrayList();
if(e instanceof BindException){
Iterator<FieldError> iterator = ((BindException) e).getBindingResult().getFieldErrors().iterator();
while (iterator.hasNext()){
FieldError fieldError = iterator.next();
String errorMsg = fieldError.getDefaultMessage();
returnlist.add(errorMsg);
}
}
return returnlist;
}
}
使用postman进行测试