参数校验注解

这篇博客探讨了Java中参数校验的常用注解,包括@Validated和@Valid的相同点和不同点。相同点在于它们都用于验证参数合规性。不同点主要体现在提供者(@Validated由Spring Validation提供,@Valid由javax提供)和作用域(@Validated作用于类、方法和参数,@Valid还作用于字段和TYPE_USE)。此外,博客还介绍了如何进行嵌套检验,通过在字段上添加@Valid注解来验证对象的内部属性。

1. 参数校验常用注解

 
       注解验证的数据类型备注                            
 Null  任意类型 参数值必须是 Null
 NotNull  任意类型 参数值必须不是 Null
 NotBlank  只能作用于字符串

 字符串不能为 null,而且字符串长度必须大于0,至少包含一个非空字符串

 NotEmpty  

 CharSequence

 Collection

 Map

 Array 

 字符串:字符串长度必须大于0,空字符串(“ ”)可以通过校验;

 Collection:集合大小必须大于0;

 Map:map的大小必须大于0;

 Array:数组长度必须大于0;

 Size 

 CharSequence

 Collection

 Map

 Array 

 同 NotEmpty
 Range

 数字类型

 字符串类型

 数值或者字符串的值必须在 min 和 max 指定的范围内
 Length 字符串类型 字符串的长度在min 和  max 之间
 Pattern 字符串类型  验证字符串是否符合正则表达式
 Min 整型类型  参数值必须大于等于 最小值
 Max 整型类型  参数值必须小于等于 最大值
 DecimalMin 整型类型   参数值必须大于等于 最小值 
 DecimalMax 整型类型   参数值必须小于等于 最大值 
 AssertTrue 布尔类型  参数值必须为 true
 AssertFalse 布尔类型   参数值必须为 false 
 Past 时间类型  参数值必须小于 当前时间
 Future 时间类型  参数值必须大于 当前时间

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2.  @Validated 和 @Valid

2.1 相同点

  在检验参数符合规范的功能上基本一致;

2.2 不同点

2.2.1 提供者

  validated 是Spring Validation验证框架对参数的验证机制;

  valid是 javax 提供的参数验证机制

2.2.2 作用域

  validated :类,方法,参数

  valid:方法, 字段, 构造方法, 参数, TYPE_USE;

  TYPE_USE:

    Java 8 之前的版本中,只能允许在声明式前使用 Annotation。而在 Java 8 版本中,Annotation 可以被用在任何使用 Type 的地方,例如:初始化对象时 (new),对象类型转化时,使用 implements 表达式时,或者使用 throws 表达式时。

 

    //初始化对象时
    String myString = new @Valid String();

    //对象类型转化时
    myString = (@Valid String) str;

    //使用 implements 表达式时
    class MyList<T> implements List<@Valid T> {
                    ...
    }

    //使用 throws 表达式时
    public void validateValues() throws @Valid ValidationFailedException{
                    ...
    }

 

3. 嵌套检验

  在被检验的字段上添加 @Valid 注解就可以实现嵌套检验

  当对象 Man 的字段 houses 包含 House 对象类型时,在检验 houses 字段时可以检验 House 对象的属性字段时,就称为嵌套检验。

  示例如下:

  在检验 Man 对象的 houses 字段时,在houses 字段上添加 @Valid 注解后,就可以检验 list 中的 House 的属性是否符合要求;

  否则只会检验 houses 的集合大小是否大于1,不会校验集合中的 House 对象,比如 House 对象的 name 长度是否符合要求。 

class Man{

    @Valid
    @Size(min = 1)
    private List<House> houses;
}

class House{

    @Length(min = 1,max = 10)
    private String name;
}

 

转载于:https://www.cnblogs.com/virgosnail/p/11556979.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值