本站消息

站长简介/公众号


站长简介:逗比程序员,理工宅男,前每日优鲜python全栈开发工程师,利用周末时间开发出本站,欢迎关注我的微信公众号:幽默盒子,一个专注于搞笑,分享快乐的公众号

  价值13000svip视频教程,java大神匠心打造,零基础java开发工程师视频教程全套,基础+进阶+项目实战,包含课件和源码

  出租广告位,需要合作请联系站长


+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

2021-05(18)

2021-06(40)

2021-07(5)

SpringBoot:yaml配置注入和JSR303数据校验

发布于2021-06-12 15:58     阅读(629)     评论(0)     点赞(27)     收藏(4)


YAML是 JSON 的超集,因此是一种用于指定分层配置数据的便捷格式。

传统xml配置:

  1. <server>
  2. <port>8081<port>
  3. </server>

yaml配置:

  1. server:
  2. prot: 8080
  • 说明:语法要求严格!

    1、空格不能省略

    2、以缩进来控制层级关系,只要是左边对齐的一列数据都是同一个层级的。

    3、属性和值的大小写都是十分敏感的。

案例使用:

1.建立一个application.yaml文件

  1. server:
  2. port: 8081
  3. #对空格要求十分高
  4. # 普通的key-value
  5. #注入到我们的配置类中
  6. name: chenjinxian
  7. #对象
  8. student:
  9. name: chenjinxian
  10. age: 3
  11. #行内写法
  12. student2: {name: chenjinxian,age: 3}
  13. #数组
  14. pets:
  15. - cat
  16. - dog
  17. - pig
  18. pets2: [cat,dog,pig]
  19. person:
  20. # name: chenjinxian
  21. name: ${random.uuid}
  22. age: ${random.int}
  23. happy: false
  24. birth: 2021/6/7
  25. maps: {k1: v1,k2: v2}
  26. lists:
  27. - code
  28. - music
  29. - girl
  30. dog:
  31. name: ${person.hello:hello}_旺财2
  32. age: 3

2.建立两个实体类

Dog类

  1. package com.chen.pojo;
  2. import lombok.AllArgsConstructor;
  3. import lombok.Data;
  4. import lombok.NoArgsConstructor;
  5. import org.springframework.beans.factory.annotation.Value;
  6. import org.springframework.stereotype.Component;
  7. @AllArgsConstructor
  8. @Data
  9. @NoArgsConstructor
  10. @Component
  11. public class Dog {
  12. @Value("旺财")
  13. private String name;
  14. @Value("3")
  15. private Integer age;
  16. }

Person类

  1. package com.chen.pojo;
  2. import lombok.AllArgsConstructor;
  3. import lombok.Data;
  4. import lombok.NoArgsConstructor;
  5. import org.springframework.boot.context.properties.ConfigurationProperties;
  6. import org.springframework.stereotype.Component;
  7. import java.util.Date;
  8. import java.util.List;
  9. import java.util.Map;
  10. @Data
  11. @AllArgsConstructor
  12. @NoArgsConstructor
  13. @Component
  14. @ConfigurationProperties(prefix = "person")
  15. public class Person {
  16. private String name;
  17. private Integer age;
  18. private Boolean happy;
  19. private Date birth;
  20. private Map<String,Object> maps;
  21. private List<Object> lists;
  22. private Dog dog;
  23. }

 

然后在pom.xml配置

  1. <!--防止使用@ConfigurationProperties(prefix = "person")爆红-->
  2. <dependency>
  3. <groupId>org.springframework.boot</groupId>
  4. <artifactId>spring-boot-configuration-processor</artifactId>
  5. <version>2.5.0</version>
  6. </dependency>

最后在test包下进行测试

  1. package com.chen;
  2. import com.chen.pojo.Dog;
  3. import com.chen.pojo.Person;
  4. import org.junit.jupiter.api.Test;
  5. import org.springframework.beans.factory.annotation.Autowired;
  6. import org.springframework.boot.test.context.SpringBootTest;
  7. @SpringBootTest
  8. class Spring02ConfigApplicationTests {
  9. @Autowired
  10. Dog dog;
  11. @Autowired
  12. private Person person;
  13. @Test
  14. void contextLoads() {
  15. System.out.println(dog);
  16. System.out.println(person);
  17. }
  18. }

 

 

Springboot中可以用@validated来校验数据,如果数据异常则会统一抛出异常,方便异常中心统一处理。(JSR303数据校验)

  • 使用javax.validation对其参数和/或返回值的约束进行注释。
  • 具有此类注释方法的目标类需要使用@Validated类型级别的注释进行注释,以便在其方法中搜索内联约束注释。

 

写个注解让我们的name只能支持Email格式;

更改上边的Person类:

  1. package com.chen.pojo;
  2. import lombok.AllArgsConstructor;
  3. import lombok.Data;
  4. import lombok.NoArgsConstructor;
  5. import org.springframework.boot.context.properties.ConfigurationProperties;
  6. import org.springframework.stereotype.Component;
  7. import org.springframework.validation.annotation.Validated;
  8. import javax.validation.constraints.Email;
  9. import java.util.Date;
  10. import java.util.List;
  11. import java.util.Map;
  12. @Data
  13. @AllArgsConstructor
  14. @NoArgsConstructor
  15. @Component
  16. @ConfigurationProperties(prefix = "person")
  17. @Validated//数据校验
  18. public class Person {
  19. @Email(message = "邮箱格式不正确")
  20. private String name;
  21. private String lastName;
  22. private Integer age;
  23. private Boolean happy;
  24. private Date birth;
  25. private Map<String,Object> maps;
  26. private List<Object> lists;
  27. private Dog dog;
  28. }

pom.xml添加依赖:

  1. <!--@Validated//数据校验-->
  2. <dependency>
  3. <groupId>org.springframework.boot</groupId>
  4. <artifactId>spring-boot-starter-validation</artifactId>
  5. <version>2.5.0</version>
  6. </dependency>

输出结果:

 

常见参数

  1. @NotNull(message="名字不能为空")
  2. private String userName;
  3. @Max(value=120,message="年龄最大不能查过120")
  4. private int age;
  5. @Email(message="邮箱格式错误")
  6. private String email;
  7. 空检查
  8. @Null 验证对象是否为null
  9. @NotNull 验证对象是否不为null, 无法查检长度为0的字符串
  10. @NotBlank 检查约束字符串是不是Null还有被Trim的长度是否大于0,只对字符串,且会去掉前后空格.
  11. @NotEmpty 检查约束元素是否为NULL或者是EMPTY.
  12. Booelan检查
  13. @AssertTrue 验证 Boolean 对象是否为 true
  14. @AssertFalse 验证 Boolean 对象是否为 false
  15. 长度检查
  16. @Size(min=, max=) 验证对象(Array,Collection,Map,String)长度是否在给定的范围之内
  17. @Length(min=, max=) string is between min and max included.
  18. 日期检查
  19. @Past 验证 Date 和 Calendar 对象是否在当前时间之前
  20. @Future 验证 Date 和 Calendar 对象是否在当前时间之后
  21. @Pattern 验证 String 对象是否符合正则表达式的规则
  22. .......等等

 



所属网站分类: 技术文章 > 博客

作者:小泽圈儿郎

链接:http://www.javaheidong.com/blog/article/222560/8d6cc8b34ea8beb29eb7/

来源:java黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

27 0
收藏该文
已收藏

评论内容:(最多支持255个字符)