application.yml中的一些语法细节

我在开发代码生成工具时,大量使用了application.yml进行配置,这次看课程的时候,又看到了相关的知识点,发现有一些细节我自己之前也没有意识到,所以这儿整理一下。

基础知识

  1. 单引号和双引号的区别:单引号不会转义,双引号会转义。
  2. list的内内联写法:math: [131,140,148]
  3. map的内联写法:chinese: {first: 128,second: 136}

对Map的一些处理

我之前实验的过程中,进行Map相关的操作时,出现了一些奇奇怪怪的问题,但是我在看课程的时候,发现并没有这些问题,所以我这儿重新进行一下实验,定义如下Property

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16

@Data
@Component
@ConfigurationProperties(prefix = "person")
public class PersonProperties {
    private Map<String, Pet> pets;
    private Map<String, Object> petsObj;
    private Map<String, List<Pet>> petsList;
}

@Data
class Pet {
    private Integer id;
    private Integer age;
}

准备如下application.yml文件:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

person:
  pets:
    tom:
      id: 1
      age: 3
    jack:
      id: 2
      age: 3
  pets-obj:
    tom:
      id: 1
      age: 3
    jack:
      id: 2
      age: 3
  pets-list:
    zhangsan:
      - id: 1
        age: 3
      - id: 2
        age: 3

总结一下我之前犯的错误,我当时的需求是想用Map<String, Pet>去接受一个配置项,即本实例中的pets字段,但是我错误的写了如下的配置:

1
2
3
4
5
6
7
8

person:
  pets:
    - id: 1
      age: 3
    - id: 2
      age: 3

后续:

针对Map,有个让人头疼的问题,application.yml自动提示在对Map类型效果不是很好。