validation_数据验证

Maven依赖

spring-boot-starter-validation

Bean Validation 内置的 constraint

AssertFalse 被注解元素必须是否定值 支持boolean null
AssertTrue 注解元素必须是肯定值
DecimalMax 注解元素必须是一个数字,其值必须小于或者等于指定值的最大值 BigDecimal、BigInteger、CharSequence、byte、short、int、long、null
DecimalMin 被注解的元素必须是一个数组,其值必须大于或者等于指定最小值。数据范围同DecimalMax
Digits 被注解的元素必须是可接受范围内的数字,数据范围同DecimalMax
Email 元素必须是字符串,必须是格式正确的邮箱地址 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的时候校验,不需要的补校验

在实体类中 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;
}

在controller 中是 @Validated 指定使用哪个组

新增时 指定 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上 否则会报错

效验结果会绑定在BindingResult对象中

//接口
@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){
        Map map = new HashMap<>();
        List errorList = result.getFieldErrors();
        for(FieldError error : errorList){
            //BindingResult 发生错误对应的某个属性
            String field= error.getField();
            //发生错误时的消息
            String msg = error.getDefaultMessage();
        }

你可能感兴趣的:(常用API,java,开发语言,后端)