Validated 中常用的注解
- 导入依赖
- 常用注解
- 嵌套校验
- 校验注解的三个参数
- 在post 和 [get](https://so.csdn.net/so/search?q=get&spm=1001.2101.3001.7020) 请求上使用
- 添加全局异常处理器,处理参数验证异常
导入依赖
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId>
</dependency>
常用注解
注解 | 验证的数据类型 | 描述 | |
---|---|---|---|
1 | @NotNull | 任意类型 | 验证属性不能为null |
2 | @NotBlank | 字符串 | 验证字符串属性不能为空且长度必须大于0 |
3 | 字符串 | 验证字符串属性是否符合Email格式 | |
4 | @Pattern | 字符串 | 验证字符串属性是否符合指定的正则表达式 |
5 | @Length(min,max) | 字符串 | 验证字符串的长度是否在给定的范围之内,包含两端 |
6 | @Size(min,max ) | CharSequence Collection Map Array | 字符串:字符串长度必须在指定的范围内,Collection:集合大小必须在指定的范围内,Map:map的小必须在指定的范围内,Array:数组长度必须在指定的范围内 |
7 | @Min | 整型类型 | 验证数字属性的最小值 |
8 | @Max | 整型类型 | 验证数字属性的最大值 |
9 | @DecimalMin | 数字类型 | 验证数字属性的最小值(包括小数) |
10 | @DecimalMax | 数字类型 | 验证数字属性的最大值(包括小数) |
11 | @Digits(integer,fraction) | 数字类型 | 数字类型 验证数字属性的整数位数和小数位数 |
12 | @Positive | 数字类型 | 验证数值为正数 |
13 | @PositiveOrZero | 数字类型 | 验证数值为正数或0 |
14 | @Negative | 数字类型 | 验证数值为负数 |
15 | @NegativeOrZero | 数字类型 | 验证数值为负数或0 |
16 | @Range(min=, max=) | 检查带注释的值是否位于(包括)指定的最小值和最大值之间。 | |
17 | @AssertTrue | 布尔类型 | 参数值必须为 true |
18 | @AssertFalse | 布尔类型 | 参数值必须为 false |
19 | @Past | 时间类型(Date) | 参数值为时间,且必须小于 当前时间 |
20 | @PastOrPresent | 时间类型(Date) | 参数值为时间,且必须小于或等于 当前时间 |
21 | @Future | 时间类型(Date) | 参数值为时间,且必须大于 当前时间 |
22 | @FutureOrPresent | 时间类型(Date) | 参数值为时间,且必须大于或等于 当前日期 |
嵌套校验
在被检验的字段上添加 @Valid 注解就可以实现嵌套检验
@Data
public class User {// 会校验到address对象里面的备注@Validprivate Address assress;
}@Dataclass Address {@NotBlank(message = "备注不能为空")private String remark;
}
校验注解的三个参数
- message:自定义错误消息。可以通过该参数指定验证失败时返回的错误消息
@Data
public class User {@NotBlank(message = "用户名不能为空")private String username;
}
- groups:分组校验。可以通过该参数指定在特定的验证分组中才进行验证。同事组可以继承组
public interface Add {}public interface Update {}@Data
public class User {// 只有当@Validated(Add.class) 才生效@NotBlank(message = "名称不能为空",groups = Add.class)private String username;// 只有当@Validated(Update.class) 才生效@NotBlank(message = "密码不能为空",groups = Update.class)private String password;
}
- payload:用于携带额外的验证信息。可以通过该参数传递一些自定义的验证信息。(不常用)
在post 和 get 请求上使用
// post
@PostMapping("/")
public Result<Void> create(@Validated(Add.class) @RequestBody User user) {}
// get
@GetMapping("/selector")
public Result<List<User>> selector(@RequestParam @NotBlank(message = "名称不能为空") String name){}
添加全局异常处理器,处理参数验证异常
@ExceptionHandler(value = BindException.class)
public Result<String> bindExceptionHandler(BindException ex) {log.debug("[bindExceptionHandler]", ex);// 拼接错误StringBuilder detailMessage = new StringBuilder();for (ObjectError objectError : ex.getAllErrors()) {// 使用 ; 分隔多个错误if (detailMessage.length() > 0) {detailMessage.append(";");}// 拼接内容到其中detailMessage.append(objectError.getDefaultMessage());}// 包装 CommonResult 结果return Result.error("请求参数不合法" + ":" + detailMessage.toString());
}