@Validated 校验对象中引用对象的属性

1. 众所周知@Validated 和@Valid 可以对接口入参的属性进行校验

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
@Valid@Validated都是用来校验接收参数的。
  
@Valid是使用Hibernate validation的时候使用
  
@Validated是只用Spring Validator校验机制使用
  
说明:java的JSR303声明了@Valid这类接口,而Hibernate-validator对其进行了实现。
  
  
  
@Validated@Valid区别:
  
@Validated:可以用在类型、方法和方法参数上。但是不能用在成员属性(字段)上,不支持嵌套检测
@Valid:可以用在方法、构造函数、方法参数和成员属性(字段)上,支持嵌套检测\
  
  
  
注意:SpringBoot使用@Valid注解需要引入如下POM
  
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-validation</artifactId>
</dependency>

 

 默认了解以上的区别之后,就已经很容易了,我们要做的正式嵌套的检测,比如我有一个对象school 组合了一个对象class,想要去校验class的某一个属性是否符合某一个规范我们就可以这样写

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//学校实体
@Data
public class School {
    String schoolName;
 
    //如何校验student的name是否符合规范
    Student student;
 
}
 
//学生实体
@Data
public class Student {
 
    String name;
    String age;
 
}
 
 
//接口校验
 @PostMapping("list")
    public void list(@Validated School school) {}

 

了解了这两个注解之后就明白了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//学校实体
@Data
public class School {
    String schoolName;
 
    //如何校验student的name是否符合规范
    //这里使用@Valid注解
    @Valid
    Student student;
 
}
 
//学生实体
@Data
public class Student {
    //这里写上哪写属性需要被校验 比如name要求非空
    @NotBlank(message = "name非空")
    String name;
    String age;
 
}

 然后接口上在使用@Validated 对School对象进行校验,同时也能对它的引用对象school对象的name属性进进行校验!

 

 

呼!!!! 打完收工!!!

 

  

posted @   少侠砍人不用刀  阅读(1762)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话
点击右上角即可分享
微信分享提示