Maven依赖
spring-boot-starter-validation
AssertFalse | 被注解元素必须是否定值 支持boolean null |
---|---|
AssertTrue | 注解元素必须是肯定值 |
DecimalMax | 注解元素必须是一个数字,其值必须小于或者等于指定值的最大值 BigDecimal、BigInteger、CharSequence、byte、short、int、long、null |
DecimalMin | 被注解的元素必须是一个数组,其值必须大于或者等于指定最小值。数据范围同DecimalMax |
Digits | 被注解的元素必须是可接受范围内的数字,数据范围同DecimalMax |
元素必须是字符串,必须是格式正确的邮箱地址 CharSequence 、null | |
Future | 元素必须是未来的某个时刻,日期或时间 |
FutureOrPresent | 元素必须是现在或未来的某个时刻,日期或时间 |
Max | 元素必须是一个数字,值必须小月或者等于最大指定值 BigDecimal、BigInteger、byte、short、int、long、包装类 |
Min | 元素必须是一个数字,值必须大于或等于指定的最小值 |
Negative | 元素必须是严格的负数(0视为无效值) |
NegativeOrZero | 元素必须是负数或0 |
NotBlank | 元素不能为空,并且必须只收包含一个非空白字符 CharSequence( |
NotEmpty | 元素不能为null 或 空 CharSequence(评估字符序列的长度) Colletion(评估集合容量) Map(评估Map容量) Array(评估数组长度) |
NotNull | 元素值不能为null |
Null | 元素必须是null |
Past | 元素必须是过去的某个时刻,日期或时间 |
PastOrPresent | 元素必须是过的或现在的某个时刻,日期或时间 |
Pattem | 元素必须匹配指定的正则表达式, |
Positive | 元素必须是严格的正数(0视为无效值) |
PositveOrZero | 元素必须是正数或0 |
Size | 元素必须在指定的边界(包括)之间 |
开发中:添加部门时,id是由后端生成的,不需要效验id是否为空,但是修改的时候需要校验id是空,此时就可以定义分组,在需要效验id的时候校验,不需要的补校验
interface Insert {} interface Update {}
@Data class SysDept{ @NotNull( groups = Udate.class , message = "id不能为空") private Integer deptId; @NotNull( groups = {Insert.class , Update.class} , message = "id不能为空") private Integer parentId; }
新增时 指定 insert 修改指定Update 这样就会在新增的时候不对id进行效验,修改效验id属性是否为空,新增修改都会效验 parentId 是否为空
如果存在其他效验还必须添加 Default.class,否则不会执行其他效验 ( @NotBlank( groups = Default.class , message = "默认效验" ) )
@PostMapping R save(@Validated({Insert.class,Default.class})@RequestBody SysDept sysDept ){ ...; } @PutMapping R update(@Validated({Update.class,Default.class}) @RequestBody SysDept sysDept) {}
@Null(message = "XXXX不能为空") 被注释的元素必须为 null, message尽量要写不然前端不知道是哪个字段 @NotNull(message = "XXXX不能为空") 被注释的元素必须不为 null, message尽量要写不然前端不知道是哪个字段 @Length 被注释的字符串的大小必须在指定的范围内,注意只能用在String上 否则会报错, message尽量要写不然前端不知道是哪个字段 @NotEmpty 被注释的字符串的必须非空,注意只能用在String上 否则会报错, message尽量要写不然前端不知道是哪个字段 @AssertTrue(message = "XXXX") 被注释的元素必须为 true, message尽量要写不然前端不知道是哪个字段 @AssertFalse 被注释的元素必须为 false @Min(value=L,message="XXXX") 被注释的元素必须是一个数字,其值必须大于等于指定的最小值, message尽量要写不然前端不知道是哪个字段 @Max(value=L,message="XXXX") 被注释的元素必须是一个数字,其值必须小于等于指定的最小值, message尽量要写不然前端不知道是哪个字段 @DecimalMin(value=L,message="XXXX") 被注释的元素必须是一个数字,其值必须大于等于指定的最小值, message尽量要写不然前端不知道是哪个字段 @DecimalMax(value=L,message="XXXX") 被注释的元素必须是一个数字,其值必须小于等于指定的最大值, message尽量要写不然前端不知道是哪个字段 @Size(max, min) 被注释的元素的大小必须在指定的范围内, message尽量要写不然前端不知道是哪个字段 @Digits (integer, fraction) 被注释的元素必须是一个数字,其值必须在可接受的范围内, message尽量要写不然前端不知道是哪个字段 @Past 被注释的元素必须是一个过去的日期, message尽量要写不然前端不知道是哪个字段 @Future 被注释的元素必须是一个将来的日期, message尽量要写不然前端不知道是哪个字段 @Pattern(value) 被注释的元素必须符合指定的正则表达式, message尽量要写不然前端不知道是哪个字段 @Email 被注释的元素必须是电子邮箱地址, message尽量要写不然前端不知道是哪个字段 @Range 被注释的元素必须在合适的范围内, message尽量要写不然前端不知道是哪个字段 @NotBlank 验证字符串非null,且长度必须大于0,注意只能用在String上 否则会报错
//接口 @PostMapping("/doLogin") public GraceJSONResult doLogin(@RequestBody @Valid RegistLoginBO registLoginBO, BindingResult result);//valid的错误信息会保存到 bindingResult中 //实现类 public GraceJSONResult doLogin(@Valid RegistLoginBO registLoginBO, BindingResult result) { //判断BindingResult 中是否保存了错误的验证信息,如果有,则需要返回 if(result.hasErrors()){ } //实体类 @Data public class RegistLoginBO { @NotNull(message = "手机号不能为空") private String mobile; @NotNull(message = "短信验证码不能为空") private String smsCode;
获取错误信息
转换成FieldError对象
getField() 来获取当前错误属性
getDefaultMessage() 获取当前错误信息@NotNull(message = "短信验证码不能为空")
public void getErrors(BindingResult result){ Mapmap = new HashMap<>(); List errorList = result.getFieldErrors(); for(FieldError error : errorList){ //BindingResult 发生错误对应的某个属性 String field= error.getField(); //发生错误时的消息 String msg = error.getDefaultMessage(); }