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 对象是否符合正则表达式的规则

.......等等除此以外,我们还可以自定义一些数据校验规则

下面是注解的位置

posted @ 2022-02-28 16:14  从0开始丿  阅读(103)  评论(0编辑  收藏  举报