使用步骤
1.引入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
2.异常拦截类
/*** 全局异常处理*/
@Slf4j
@RestControllerAdvice
public class GlobalExcepitonHandler {/*** 处理Assert的异常*/@ResponseStatus(HttpStatus.BAD_REQUEST)@ExceptionHandler(value = IllegalArgumentException.class)public Result handler(IllegalArgumentException e) throws IOException {log.error("Assert异常:-------------->{}",e.getMessage());return Result.fail(e.getMessage());}/*** @Validated 校验错误异常处理*/@ResponseStatus(HttpStatus.BAD_REQUEST)@ExceptionHandler(value = MethodArgumentNotValidException.class)public Result handler(MethodArgumentNotValidException e) throws IOException {log.error("运行时异常:-------------->",e);BindingResult bindingResult = e.getBindingResult();ObjectError objectError = bindingResult.getAllErrors().stream().findFirst().get();return Result.fail(objectError.getDefaultMessage());}@ResponseStatus(HttpStatus.BAD_REQUEST)@ExceptionHandler(value = RuntimeException.class)public Result handler(RuntimeException e) throws IOException {log.error("运行时异常:-------------->",e);return Result.fail(e.getMessage());}
}
3.测试
@Data
public class LoginDto {@NotBlank(message = "账号不能为空")private String no;@NotBlank(message = "密码不能为空")private String password;
}
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class User {private Integer id;// 每一个注解都包含了message字段,用于校验失败时作为提示信息。不写message将使用默认的错误提示信息。@Size(min = 5, max = 10, message = "请输入5-10个字符的用户名")private String username;private String password;@Min(18)private Integer age;@NotBlank(message = "手机号码不能为空")@Pattern(regexp = "^1(3|4|5|7|8)\\d{9}$", message = "手机号码格式错误")private String phone;@Email(message = "邮箱格式错误")private String email;@NotNull(message = "生日不能为空")@Past // 生日必须是一个过去的时间@DateTimeFormat(pattern = "yyyy-MM-dd")private Date birthday;}
常用标签
常用三个标签的区别:@NotBlank,@NotNull,@NotEmpty
@NotEmpty用在集合类上面,不能为null,并且长度必须大于0@NotBlank 用在String上面,只能作用在String上,不能为null,而且调用trim()后,长度必须大于0
@NotNull 用在基本类型上,不能为null,但可以为空字符串
其他数据校验注解
@Null 被注释的元素必须为 null
@NotNull 被注释的元素必须不为 null
@AssertTrue 被注释的元素必须为 true
@AssertFalse 被注释的元素必须为 false
@Min(value) 被注释的元素必须是一个数字,其值必须大于等于指定的最小值
@Max(value) 被注释的元素必须是一个数字,其值必须小于等于指定的最大值
@DecimalMin(value) 被注释的元素必须是一个数字,其值必须大于等于指定的最小值
@DecimalMax(value) 被注释的元素必须是一个数字,其值必须小于等于指定的最大值
@Size(max=, min=) 被注释的元素的大小必须在指定的范围内
@Digits (integer, fraction) 被注释的元素必须是一个数字,其值必须在可接受的范围内
@Past 被注释的元素必须是一个过去的日期
@Future 被注释的元素必须是一个将来的日期
@Pattern(regex=,flag=) 被注释的元素必须符合指定的正则表达式
// Hibernate Validator提供的校验注解:
@NotBlank(message =) 验证字符串非null,且长度必须大于0
@Email 被注释的元素必须是电子邮箱地址
@Length(min=,max=) 被注释的字符串的大小必须在指定的范围内
@NotEmpty 被注释的字符串的必须非空
@Range(min=,max=,message=) 被注释的元素必须在合适的范围内