@Valid和@Validated的用法(区别)

通俗的讲,两者在基本用法上一样,在使用上,分组校验用@Validated,嵌套校验用@Valid

区别@valid@validate
提供者spring-boot-starter-web 里面,springboot 项目自带Spring 做得一个自定义注解,增强了分组功能
是否支持分组不支持支持,参数校验时,根据不同的分组采取不同的校验
使用位置构造函数、方法、方法参数、成员属性类、方法、方法参数,不能用于成员属性
嵌套校验支持,因为可以在成员属性上使用不支持

基本用法,其他自行百度

注解验证的数据类型备注
Null任意类型参数值必须是 Null
NotNull任意类型参数值必须不是 Null
NotBlank只能作用于字符串字符串不能为 null,而且字符串长度必须大于 0,至少包含一个非空字符串
NotEmpty字符串和数组集合等参数值不能为 null,集合不能为空 (空字符串(“ ”)可以通过校验)

准备,引入包时,如果是spring boot项目,不需要什么包,其他项目需要引入,具体如下:

        <!--第一种方式导入校验依赖:使用springboot时,在org\springframework\spring-context\5.2.1.RELEASE\spring-context-5.2.1.RELEASE.jar-->
		<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <!--第二种方式导入校验依赖-->
        <dependency>
            <groupId>javax.validation</groupId>
            <artifactId>validation-api</artifactId>
            <version>2.0.1.Final</version>
        </dependency>
        <!--第三种方式导入校验依赖-->
        <dependency>
            <groupId>org.hibernate.validator</groupId>
            <artifactId>hibernate-validator</artifactId>
        </dependency>

 展示:@Validated和@Valid注解主要是做入参校验,我们一般用在Controller上。当然,也可以用在其他地方,讲完一般再说。

实体类:字段属性上加上@NotEmpty等注解,嵌套的List上,必须加@Valid注解(和@Validated的区别就在这,这里用@Validated或者不用@Valid都不会嵌套校验

Controller:@RequestBody和@Validated的顺序无关紧要,我看有的人说因为顺序校验不起作用,不然。

上面用@Validated或@Valid效果一样,但不是所有地方都可以平替,比如下面这个:(区别所在,@Validated不支持嵌套校验

@Validated用于类、方法、参数的示例:

注意,类名上必须用@Validated。(@Valid不支持类上注解,区别所在

注:这里把 @Validated 注解放在方法上或者是方法参数前都是可以的,@Validated 注解统一放在类上边省去了一个一个方法上或者入参上添加该注解,如下:

 讲完一般用法,再讲一下别的,有时候需要在Service层的方法上做参数校验,应该怎么实现呢?

@Service
@Validated
public class PersonService {

    public void validatePersonRequest(@Valid PersonRequest personRequest) {
        // do something
    }

}

@Validated 需要用在被Spring容器管理的类上。

一定一定不要忘记在类上加上 @Validated  注解了,这个参数可以告诉 Spring 去校验方法参数。而且再次强调,此处@Validated注解不能替换为@Valid,因为@Valid不支持类上注解,区别所在。

@Validated的分组和自定义校验就不说了,用到了自行百度吧。

总结

1、@Validated是Spring对@Valid的包装,增加了分组校验,删除了嵌套校验

2、@Validated放在类名上,是一种标记,告诉Spring这个类要被校验,@Valid放在类上无效

3、@Validated在controller层的参数前和@Valid效果一样

4、在其他层的方法和参数前,最好使用@Valid,放在方法上,是对:方法返回的对象进行校验

  • 11
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值