SpringBoot - yaml语法及JSR303校验
时间:2023-03-21
本文章向大家介绍SpringBoot - yaml语法及JSR303校验,主要内容包括yaml语法、yaml可以直接给实体类赋值、原来用Spring的方式、使用yaml赋值、使用properties文件赋值(个人感觉不如yaml配置好用)、松散绑定、JSR303数据校验、使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
yaml语法
# key: value
# 对空格的要求十分高
# 普通的key-value:key=value
# 注入到我们的配置类中
name: qinjiang
# 对象(包含两个属性)
student:
name: qinjiang
age: 3
# 三个对象
student:
name: qinjiang
age: 3
# student对象下的name属性下的age属性
student:
name: qinjiang
age: 3
# 行内写法:对象(包含两个属性)
student: {name: qinjiang,age: 3}
# 数组
pets:
- cat
- dog
- pig
# 行内写法:数组
pets: [cat,dog,pig]
yaml可以直接给实体类赋值
原来用Spring的方式
-
创建实体类,使用@Value注解来赋值
@Component public class Dog { @Value("旺财") private String name; @Value("3") private int age; public Dog() { } public Dog(String name, int age) { this.name = name; this.age = age; } @Override public String toString() { return "Dog{" + "name='" + name + '\'' + ", age=" + age + '}'; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
-
测试类
@SpringBootTest class Springboot02ConfigApplicationTests { @Autowired private Dog dog; @Test void contextLoads() { System.out.println(dog); } }
使用yaml赋值
-
在resources文件夹中新建yaml配置文件
person: name: qinjiang age: 3 happy: false birth: 2023/3/21 maps: k1: v1 k2: v2 lists: [sing,jump,rap] dog: name: 旺财 age: 3
-
实体类
@Component @ConfigurationProperties(prefix = "person") // 这里注意要与配置文件中的对象名一致 public class Person { // 有参、无参构造器,Getter、Setter、toString方法 }
这里使用的是实体类来举例,今后的配置类可以通过这种方法来进行赋值
使用properties文件赋值(个人感觉不如yaml配置好用)
-
在resources文件夹中新建properties配置文件
name=kuangshen
-
配置实体类
@Component @PropertySource(value = "classpath:qinjiang.properties") // 绑定配置文件名称 public class Person { // SPEL表达式取出配置文件的值 @Value("${name}") private String name; ... }
@ConfigurationProperties | @Value | |
---|---|---|
功能 | 批量注入配置文件中的属性 | 一个个指定 |
松散绑定(松散语法) | 支持 | 不支持 |
SpEL | 不支持 | 支持 |
JSR303 | 支持 | 不支持 |
复杂类型封装 | 支持 | 不支持 |
- @ConfigurationProperties只需要写一次即可,@Value则需要每个字段都添加
- 可以看到,yaml配置文件中的命名为
first-name
,实体类中的命名为firstName
,-后面跟着的字母默认是大写的。这就是松散绑定。 - JSR303校验,就是我们可以在字段上增加一层过滤器验证,可以保证数据的合法性
- 复杂类型封装,yaml可以封装对象,使用@Value就不支持
松散绑定
-
配置yaml文件
dog: first-name: 阿黄 age: 3
-
配置实体类
@Component @ConfigurationProperties(prefix = "dog") public class Dog { private String firstName; private int age; ... }
结论:
- 配置yaml和配置properties都可以获取到值,强烈推荐yaml
- 如果我们在某个业务中,只需要获取配置文件中的某个值,可以使用一下@Value
- 如果说,我们专门编写了一个JavaBean来喝配置文件进行映射,就直接使用@ConfigurationProperties,不要犹豫!
JSR303数据校验
- JSR303校验,就是我们可以在字段上增加一层过滤器验证,可以保证数据的合法性
-
pom文件导入依赖
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-validation --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-validation</artifactId> <version>2.7.9</version> </dependency>
-
配置实体类
@Component @ConfigurationProperties(prefix = "person") @Validated // 数据校验开启 public class Person { @Email // @Eamil(message = "邮箱格式错误") 此处为设置提示消息,可自定义 private String name; ... }
-
测试输出
被注释的元素必须是一个数字,其值必须大于等于指定的最小值
Constraint | 详细信息 |
---|---|
@Null | 被注释的元素必须为null |
@NotNull | 被注释的元素必须不为null |
@AssertTrue | 被注释的元素必须为true |
@AssertFalse | 被注释的元素必须为false |
@Min(value) | 被注释的元素必须是一个数字,其值必须大于等于指定的最小值 |
@Max(value) | 被注释的元素必须是一个数字,其值必须小于等于指定的最大值 |
@DecimalMin(value) | 被注释的元素必须是一个数字,其值必须大于等于指定的最小值 |
@DecimalMax(value) | 被注释的元素须必须是一个数字,其值必须小于等于指定的最大值 |
@Size(max,min) | 被注释的元素的大小必须在指定的范围内 |
@Digits(integer,fraction) | 被注释的元素必须是一个数字,其值必须在可接受的范围内 |
@Past | 被注释的元素必须是一个过去的日期 |
@Future | 被注释的元素必须是一个将来的日期 |
@Pattern(value) | 被注释的元素必须符合指定的正则表达式 |
被注释的元素必须是电子邮箱地址 | |
@Length | 被注释的字符串的大小必须在指定的范围内 |
@NotEmpty | 被注释的字符串必须非空 |
@Range | 被注释的元素必须在合适的范围内 |
原文地址:https://www.cnblogs.com/jiaxing-java/p/17238584.html
- TCP/IP(八)之总结TCP/IP四层模型
- 在Orchard中使用Image Gallery模块
- CentOS7设置IP地址
- 服务器端Javascript
- ASP连接数据库
- 彻底隐藏你HTML网页的源代码
- java学习:JMM(java memory model)、volatile、synchronized、AtomicXXX理解
- 使用CSS制作文字环绕图片效果(文字内容包含<li>标签)
- ClojureScript魔法堂:搭建开发环境
- PHP error_reporting() 错误控制函数功能详解
- centos上安装elasticsearch 5.5.1 遇到的各种坑
- 概率论08 随机变量的函数
- @Transactional导致AbstractRoutingDataSource动态数据源无法切换的解决办法
- 防F12扒代码:按下F12关闭当前页面
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- JTAG
- ICON
- BSCAN
- ILA
- VIO
- FPGA程序加载方式
- 国密SSL协议之性能测试
- 发现一个好看的手机壁纸网站,撸代码的手已经饥渴难耐了
- 还在为怎么学习Android苦恼?看完学会这些大牛资料,2年高级3年资深不是问题!
- 面试心得:一个BAT大厂面试者整理的Android面试题目,五轮面试后终于拿到Offer!
- 【Lighthouse教程】scrapy爬虫初探
- python 手把手教你基于搜索引擎实现文章查重
- Intellij IDEA 如何自动生成 serialVersionUID
- Spring事务是如何应用到你的业务场景中的?
- BFE.dev前端刷题#9. 解密消息 (Facebook面试题)