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

1.背景

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

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

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

2.使用方式

步骤一:

在service接口上加上@Validated 

@Valid和@Validated在service层的应用及问题汇总_第1张图片

步骤二:

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

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

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


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

3.分组检验 

步骤一:

自定义没有方法的接口 

步骤二:

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

 

步骤三:

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

4. @Validated和@Valid的区别

1. 分组

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

2. 注解地方

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

3. 嵌套验证

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

你可能感兴趣的:(java,spring,hibernate)