首頁 > 軟體

SpringBoot中YAML語法及幾個注意點說明

2022-02-16 13:00:11

YAML語法及幾個注意點

yaml字尾名可以是.yml或者.yaml

對於語法注意的一點是固定的縮排來控制它的層級關係,它的key: value形式必須要要在中間有空格

實體類(setter,getter,toString省略)如下

@Component
@ConfigurationProperties(prefix = "person")
public class Person {
    private String lastName;
    private Integer age;
    private List<String> hobbies;
    private Map<String,Object> map;
    private Dog dog;
}

在使用了@ConfigurationProperties註解過後idea會給你發出警告,可以不管,但是這樣你在yml中設定時就沒有提示功能,所以點進警告,這時你會發現可能出現網頁找不到的情況,這時候你只需要將網址欄的版本降低即可,如下

將框中的內容放進pom,然後重新執行專案,在yaml中就會對你自己寫的標註了@ConfigurationProperties的類有了程式碼提示功能

public class Dog {
    private String name;
    private Integer age;
}

application.yml組態檔進行值的注入

person:
  last-name: 張三
  age: 25
  hobbies:
    - 籃球
    - 跑步
    - 吉他
  map: {k1: 你好,k2: 世界}
  dog:
    name: 狗東西
    age: 10

列表可以用上面的形式也可以用下面的形式,看清楚遊標處有空格,物件型別就可以用{},如下面的Map

yaml的鬆散繫結

Java中lastName的駝峰命名法,yaml中可以用其他的形式來表示。如

last_name
last-name
lastName
LASTNAME

首次玩這個如果想在測試類裡面測試,有可能你會出現執行不了一直卡在Maven。。。的框裡面,解決方案:我的錯誤收集筆記

YAML語法簡易入門

可以檢視官方或者其他的部落格資料,會有一大堆的內容

YAML語言的設計參考了JSON,XML和SDL等語言。YAML 強調以資料為中心,簡潔易讀,編寫簡單。

有意思的命名:

AML全稱是”YAML Ain’t a Markup Language”(YAML不是一種標示語言)的遞迴縮寫。 在開發的這種語言時,YAML 的意思其實是:”Yet Another Markup Language”(仍是一種標示語言)。

語法特點

  • 大小寫敏感
  • 通過縮排表示層級關係
  • 禁止使用tab縮排,只能使用空格鍵 (個人感覺這條最重要)
  • 縮排的空格數目不重要,只要相同層級左對齊即可
  • 使用#表示註釋

支援的資料結構

  • 物件:鍵值對的集合,又稱為對映(mapping)/ 雜湊(hashes) / 字典(dictionary)
  • 陣列:一組按次序排列的值,又稱為序列(sequence) / 列表(list)
  • 純量(scalars):單個的、不可再分的值

雙引號和單引號的區分

雙引號"":不會跳脫字串裡面的特殊字元,特殊字元作為本身想表示的意思。

yamlname: "123n123"

輸出: 123 換行 123

如果不加引號將會跳脫特殊字元,當成字串處理

值的寫法

1.字串

使用”或”“或不使用引號

yamlvalue0: 'hello World!'
value1: "hello World!"
value2: hello World!

2.布林值

true或false表示。

3.數位

yaml12 #整數
014 # 八進位制整數
0xC #十六進位制整數
13.4 #浮點數
1.2e+34 #指數
.inf空值 #無窮大

4.空值

null或~表示

5.日期

使用 iso-8601 標準表示日期

yamldate: 2018-01-01t16:59:43.10-05:00

在springboot中yaml檔案的時間格式 date: yyyy/MM/dd HH:mm:ss

6.強制型別轉換(瞭解)

YAML 允許使用個感嘆號!,強制轉換資料型別,單歎號通常是自定義型別,雙歎號是內建型別。

yamlmoney: !!str
123
date: !Boolean
true

內建型別列表

yaml!!int # 整數型別 
!!float # 浮點型別 
!!bool # 布林型別 
!!str # 字串型別 
!!binary # 也是字串型別 
!!timestamp # 日期時間型別 
!!null # 空值 
!!set # 集合 
!!omap,!!pairs # 鍵值列表或物件列表
!!seq # 序列,也是列表 !!map # 鍵值表

7.物件(重點)

Map(屬性和值)(鍵值對)的形式: key:(空格)v :表示一堆鍵值對,空格不可省略。

yamlcar:
    color: red
    brand: BMW

一行寫法

yamlcar:{color: red,brand: BMW}

相當於JSON格式:

json{"color":"red","brand":"BMW"}

8.陣列

一組連詞線開頭的行,構成一個陣列。

yamlbrand:
   - audi
   - bmw
   - ferrari

一行寫法

yamlbrand: [audi,bmw,ferrari]

相當於JSON

json["auri","bmw","ferrari"]

9.文字塊

|:使用|標註的文字內容縮排表示的塊,可以保留塊中已有的回車換行

yamlvalue: |
   hello
   world!

輸出結果:hello 換行 world!

+表示保留文字塊末尾的換行,-表示刪除字串末尾的換行。

yamlvalue: |
hello
value: |-
hello
value: |+
hello

輸出:hellon hello hellonn(有多少個回車就有多少個n)

注意 “|” 與 文字之間須另起一行

:使用 > 標註的文字內容縮排表示的塊,將塊中回車替換為空格,最終連線成一行

yamlvalue: > hello
world!

輸出:hello 空格 world!

注意 “>” 與 文字之間的空格

10.錨點與參照

使用 & 定義資料錨點(即要複製的資料),使用 * 參照錨點資料(即資料的複製目的地)

yamlname: &a yaml
book: *a
books: 
   - java
   - *a
   - python

輸出book: yaml

輸出books:[java,yaml,python]

注意*參照部分不能追加內容 

以上為個人經驗,希望能給大家一個參考,也希望大家多多支援it145.com。


IT145.com E-mail:sddin#qq.com