一、简介
YAML仍是一种标记语言,可以替代properties配置文件,非常适合用来做以数据为中心的配置文件。
二、基本语法
- key: value;kv之间有空格
- 大小写敏感
- 使用缩进表示层级关系(类似于python)
- 缩进不允许使用tab,只允许空格(idea中无所谓)
- 缩进的空格数不重要,只要相同层级的元素左对齐即可
- '#'表示注释
- 字符串无需加引号,如果要加,''与""表示字符串内容 会被 转义/不转义
- 字面量:单个的、不可再分的值。date、boolean、string、number、null
k: v
- 对象:键值对的集合。map、hash、set、object
#行内写法:
k: {k1:v1,k2:v2,k3:v3}
#或
k:
k1: v1
k2: v2
k3: v3
- 数组:一组按次序排列的值。array、list、queue
#行内写法:
k: [v1,v2,v3]
#或者
k:
- v1
- v2
- v3
三、示例
person类:
@Component
@ConfigurationProperties(prefix = "person")
@Data
public class Person {
private String userName;
private Boolean boss;
private Date birth;
private Integer age;
private Pet pet;
private String[] interests;
private List<String> animal;
private Map<String, Object> score;
private Set<Double> salarys;
private Map<String, List<Pet>> allPets;
}
pet类:
@Data
public class Pet {
private String name;
private Double weight;
}
application.yml:
person:
user-name: wz
boss: true
birth: 2022/8/2
age: 18
pet:
name: pipi
weight: 10
interests:
- 唱
- 跳
- rap
- 篮球
animal:
- dog
- cat
- duck
score:
english: 110
chinese: 120
salarys:
- 9999
- 8888
all-pets:
dog:
[{name: pipi, weight: 10},{name: maomao,weight: 10}]
cat:
[{name: mimi,weight: 8},{name: paopao,weight: 8}]
controller:
@RestController
public class testYAML {
@Autowired
Person person;
@RequestMapping("/person")
public Person person(){
return person;
}
}
结果:
{"userName":"wz","boss":true,"birth":"2022-08-01T16:00:00.000+00:00","age":18,"pet":{"name":"pipi","weight":10.0},"interests":["唱","跳","rap","篮球"],"animal":["dog","cat","duck"],"score":{"english":110,"chinese":120},"salarys":[9999.0,8888.0],"allPets":{"dog":[{"name":"pipi","weight":10.0},{"name":"maomao","weight":10.0}],"cat":[{"name":"mimi","weight":8.0},{"name":"paopao","weight":8.0}]}}