(3)yaml语法
yaml语法
YAML 是 “YAML Ain’t a Markup Language”(YAML 不是一种标记语言)的递归缩写。在开发的这种语言时,YAML 的意思其实是:“Yet Another Markup Language”(仍是一种标记语言)。
通俗的来说yaml也是一种配置文件,与之前的properties文件用处是一样的;
YAML 的语法和其他高级语言类似,并且可以简单表达清单、散列表,标量等数据形态。它使用空白符号缩进和大量依赖外观的特色,特别适合用来表达或编辑数据结构、各种配置文件、倾印调试内容、文件大纲(例如:许多电子邮件标题格式和YAML非常接近)。
YAML 的配置文件后缀为 .yml,如:runoob.yml 。
基本语法
- 大小写敏感
- 使用缩进表示层级关系
- 缩进不允许使用tab,只允许空格
- 缩进的空格数不重要,只要相同层级的元素左对齐即可
- '#'表示注释
对比一下我们最开始写的配置文件.xml文件
<sever>
<port>8080</port>
</sever>
现在我们的.yaml文件是这样的。
server:
port: 8080
数据类型
YAML 支持以下几种数据类型:
- 对象:键值对的集合,又称为映射(mapping)/ 哈希(hashes) / 字典(dictionary)
- 数组:一组按次序排列的值,又称为序列(sequence) / 列表(list)
- 纯量(scalars):单个的、不可再分的值
我们可以发现他有一个与传统的.properties文件不一样的特点,它可以保存对象
#yaml键值对
name: kangKing
#yaml创建对象
student:
name: Kangking
age: 18
#行内写法
student: {name: KangKing,age=18}
#properties键值对
name=KangKing
#properties创建对象
student.name=KangKing
student.age=18;
yaml数组:
#数组
pet:
- cat
- dog
- pig
pet: [cat,dog,pig]
最重要的功能其实是它可以直接给实体类赋值
回顾一下我们在Spring中学习的注解
传统赋值
package com.kang.start.pojo;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Component
public class Pet {
@Value("Dog")
String name;
@Value("3")
Integer age;
@Override
public String toString() {
return "Pet{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public Pet() {
}
public Pet(String name, Integer age) {
this.name = name;
this.age = age;
}
}
- 这里使用@Component把它注入到容器
- @Value(“默认值”)//给对象赋默认值
在单元测试中试验一下
@SpringBootTest
class StartApplicationTests {
@Autowired
private Pet pet;
@Test
void contextLoads() {
System.out.println(pet);
}
}
yaml注入
首先创建一个Person类
import java.util.Date;
import java.util.List;
import java.util.Map;
@Component
@ConfigurationProperties(prefix = "person")
public class Person {
private String name;
private Integer age;
private Boolean happy;
private Date birth;
private Map<String,Object> maps;
private List<Object> lists;
private Pet pet;
由于get和set方法等会占用大量的篇幅,先省略了;
@ConfigurationProperties(prefix = “person”)这个注解是注入默认配置的重点,它可以帮我们绑定配置文件(properties或者yaml)文件中,指定的值;
person:
name: 康王
age: 20
happy: true
birth: 2000/01/01
maps: {k1: v1,k2: v2}
lists:
-one
-two
-three
pet:
name: dog01
age: 2
其中绑定的就是第一行的person,注意:
@ConfigurationProperties(prefix = “前缀”)//前缀中一定不能有大写字母。
成功输出。
SpringBoot Configuration Annotation Processor Not Configured
在我们使用@ConfigurationProperties(prefix = “前缀”)注解的时候会报错显示
我们需要导入两个依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
再打开
重启Idea就解决了,在开发过程中有时候配置文件会乱码,建议做如下配置,编码格式都指定为UTF-8;
其中也有一些类似于STL表达式的用法
person:
name: ${person.pet.name:狗主人}的主人
age: ${random.int}
happy: true
birth: 2000/01/01
maps: {k1: v1,k2: v2}
lists:
-one
-two
-three
pet:
name: dog1
age: 2
${random.int}是随机生成int类型的数。
当我们把person.pet.name置为空时
${person.pet.name:狗主人}的主人这个表达式会检测是否为空,为空时输出默认值。
JSR303(@Validated)
作用:校验码输入的数据是否合法。
用法:
导入依赖
<!--引入validation的场景启动器-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
添加注解@Validated
@Component
@ConfigurationProperties(prefix = "person")
@Validated
public class Person {
@NotNull(message = "不能为空")
private String name;
private Integer age;
下面是常用的校验注解和报错(message)
Bean Validation 中内置的 constraint
Constraint 详细信息
@Null 被注释的元素必须为 null
@NotNull 被注释的元素必须不为 null
@AssertTrue 被注释的元素必须为 true
@AssertFalse 被注释的元素必须为 false
@Min(value) 被注释的元素必须是一个数字,其值必须大于等于指定的最小值
@Max(value) 被注释的元素必须是一个数字,其值必须小于等于指定的最大值
@DecimalMin(value) 被注释的元素必须是一个数字,其值必须大于等于指定的最小值
@DecimalMax(value) 被注释的元素必须是一个数字,其值必须小于等于指定的最大值
@Size(max, min) 被注释的元素的大小必须在指定的范围内
@Digits (integer, fraction) 被注释的元素必须是一个数字,其值必须在可接受的范围内
@Past 被注释的元素必须是一个过去的日期
@Futuret 被注释的元素必须是一个将来的日期
@Pattern(value) 被注释的元素必须符合指定的正则表达式
分类:Hibernate Validator 附加的 constraint
Constraint 详细信息
@Email 被注释的元素必须是电子邮箱地址
@Length 被注释的字符串的大小必须在指定的范围内
@NotEmpty 被注释的字符串的必须非空
@Range 被注释的元素必须在合适的范围内
原文链接:https://blog.csdn.net/xueguchen/article/details/111406671
效果: