@Valid和@Validated在service层的应用及问题汇总

1.背景

实际开发中,很多时候要对参数校验,比如为空等,

除了要在接口的入口处使用,很多普通方法也需要检查,比如service方法,

那么如何在service上使用这个参数校验呢?

2.使用方式

步骤一:

在service接口上加上@Validated 

步骤二:

1.方法参数是对象,service接口的方法参数上添加注解@Valid 

2.方法参数非对象,直接使用@NotNull、@NotBlank等

3.如果是嵌套对象的话,里面的对象还要添加 @Valid注解,


注:@NotBlank、@NotEmpty需使用org.hibernate.validator包下的注解,否则注解不生效。

3.分组检验 

步骤一:

自定义没有方法的接口 

步骤二:

在成员属性(字段)指定我们需要哪个group的校验

步骤三:

在接口方法上指定我们需要哪个group的校验

注:用了分组校验之后,@Min,@Max等可能会失效,可以为这些注解指定group。

groups = {Default.class, Create.class}

4. @Validated和@Valid的区别

1. 分组

  • @Validated:提供了一个分组功能,可以在入参验证时,根据不同的分组采用不同的验证机制。没有添加分组属性时,默认验证没有分组的验证属性。

2. 注解地方

  • @Validated:可以用在类型、方法和方法参数上。但是不能用在成员属性(字段)上
  • @Valid:可以用在方法、构造函数、方法参数和成员属性(字段)上。
  • 两者是否能用于成员属性(字段)上直接影响能否提供嵌套验证的功能。

3. 嵌套验证

  • @Validated:用在方法入参上无法单独提供嵌套验证功能。不能用在成员属性(字段)上,也无法提示框架进行嵌套验证。能配合嵌套验证注解@Valid进行嵌套验证。
  • @Valid:用在方法入参上无法单独提供嵌套验证功能。能够用在成员属性(字段)上,提示验证框架进行嵌套验证。能配合嵌套验证注解@Valid进行嵌套验证。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值