springboot-松散绑定和JSR303数据校验
继续在上一篇博客的项目中测试:springboot-yaml配置注入
1 松散绑定
1.1 修改Dog实体类的name属性为
private String firstName;
Dog类中的构造方法,get,set方法和toString方法的中的参数也要修改
1.2 在application.yaml文件中添加dog类的属性注入
dog: first-name: 大黄 age: 5
注意这个配置文件的属性名和实体类中的属性名,不完全一致
1.3 在Dog类名上加上注解
@ConfigurationProperties(prefix = "dog")
1.4 修改测试类
@SpringBootTest class Springboot02ConfigApplicationTests { @Autowired private Dog dog; @Test void contextLoads() { System.out.println(dog); } }
1.5运行程序,查看控制台
结论:使用"-"连接的命名方式和驼峰命名可以映射,即便属性名不一致,依旧注入成功
2 JSR数据校验
2.1 在Person类名上添加@Validated注解
@Validated //数据校验
2.2 在pom.xml中引入依赖
<!--JSR303数据校验--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-validation</artifactId> </dependency>
2.3 在Person类的name属性上添加注解
@NotNull private String name;
@NotNull这个注解是验证是否为空的,如果为空就报异常
2.4 修改测试类
@SpringBootTest class Springboot02ConfigApplicationTests { @Autowired private Person person; @Test void contextLoads() { System.out.println(person); } }
2.5 删除application.yaml文件中的name属性
person: age: ${random.int} #随机int happy: false Date: 2022/02/28 map: {k1: v1,k2: v2} list: - code - music - girl hello: 嘿嘿 dog: name: ${person.hello:默认值}来福 #占位符 age: 3
将name属性删除了,此时name会使用默认值null
2.6 运行测试类查看结果
报错了,因为在name属性上添加了不能为空的注解
2.7 将application.yaml文件中person对象的name属性加上
person: name: sam${random.uuid} #生成uuid age: ${random.int} #随机int happy: false Date: 2022/02/28 map: {k1: v1,k2: v2} list: - code - music - girl hello: 嘿嘿 dog: name: ${person.hello:默认值}来福 #占位符 age: 3
2.8 再次运行查看结果
成功注入了.这就JSR303对数据的验证
3 JSR303的常见注解
@NotNull(message="名字不能为空") private String userName; @Max(value=120,message="年龄最大不能查过120") private int age; @Email(message="邮箱格式错误") private String email; 空检查 @Null 验证对象是否为null @NotNull 验证对象是否不为null, 无法查检长度为0的字符串 @NotBlank 检查约束字符串是不是Null还有被Trim后的长度是否大于0,只对字符串,且会去掉前后空格. @NotEmpty 检查约束元素是否为NULL或者是EMPTY. Boolean检查 @AssertTrue 验证 Boolean 对象是否为 true @AssertFalse 验证 Boolean 对象是否为 false 长度检查 @Size(min=, max=) 验证对象(Array,Collection,Map,String)长度是否在给定的范围(min~max)之内 @Length(min=, max=) 验证字符串的长度是否介于min和max之间。 日期检查 @Past 验证 Date 和 Calendar 对象是否在当前时间之前 @Future 验证 Date 和 Calendar 对象是否在当前时间之后 @Pattern 验证 String 对象是否符合正则表达式的规则 .......等等除此以外,我们还可以自定义一些数据校验规则
下面是注解的位置
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
· 提示词工程——AI应用必不可少的技术