转发,感谢作者的无私分享。
Validation相关注解含义
@Null 限制只能为null
@NotNull 限制必须不为null
@AssertFalse 限制必须为false
@AssertTrue 限制必须为true
@DecimalMax(value) 限制必须为一个不大于指定值的数字
@DecimalMin(value) 限制必须为一个不小于指定值的数字
@Digits(integer,fraction) 限制必须为一个小数,且整数部分的位数不能超过integer,小数部分的位数不能超过fraction
@Future 限制必须是一个将来的日期
@Max(value) 限制必须为一个不大于指定值的数字
@Min(value) 限制必须为一个不小于指定值的数字
@Past 限制必须是一个过去的日期
@Pattern(value) 限制必须符合指定的正则表达式
@Size(max,min) 限制字符长度必须在min到max之间
@Past 验证注解的元素值(日期类型)比当前时间早
@NotEmpty 验证注解的元素值不为null且不为空(字符串长度不为0、集合大小不为0)
@NotBlank 验证注解的元素值不为空(不为null、去除首位空格后长度为0),不同于@NotEmpty,@NotBlank只应用于字符串且在比较时会去除字符串的空格
@Email 验证注解的元素值是Email,也可以通过正则表达式和flag指定自定义的email格式
使用示例:
message 代表的就是对应的提示信息
在对应的实体类添加注解限制之后,还需要在用到该实体的方法的参数之前@Valid注解
通过观察看出当参数不符合规范是会抛出BindException异常,这样的话我们就可以通过全局异常捕获来进行自定义格式输出。
全局异常捕获
SpringBoot提供了全局异常捕获注解@ControllerAdvice
首先定义一个全局异常捕获类GlobalExceptionHandler,加上注解ControllerAdvice,如下
在GlobalExceptionHandler类中定义了一个处理异常的方法handlerBindException
主要看方法上的注解:
@ExceptionHandler(BindException.class):ExceptionHandler所有的异常类只要发生
了就会这个注解所修饰的方法所捕获,代表捕获BindException异常
@ResponseBody :返回JSON格式数据
在抛出BindException异常情况下会携带异常信息进入handlerBindException方法中
在方法中获取我们在实体类中定义的提示信息,并返回。