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 对象是否符合正则表达式的规则
.......等等除此以外,我们还可以自定义一些数据校验规则
下面是注解的位置