简介
YAML 是 "YAML Ain't a Markup Language"(YAML 不是一种标记语言)的递归缩写。在开发的这种语言时,YAML 的意思其实是:"Yet Another Markup Language"(仍是一种标记语言)。
YAML 的语法和其他高级语言类似,并且可以简单表达清单、散列表,标量等数据形态。它使用空白符号缩进和大量依赖外观的特色,特别适合用来表达或编辑数据结构、各种配置文件、倾印调试内容、文件大纲(例如:许多电子邮件标题格式和YAML非常接近)。
YAML 的配置文件后缀为 .yml,如:runoob.yml 。
基础语法
大小写敏感
使用空格表示层级关系
缩进不允许使用tab,只允许空格
缩进的空格数不重要,只要相同层级的元素左对齐即可
'#'表示注释
对象
key: value 或者
student:
name: xx
age: 3
# 流式表示
students: {age: 3,name: xxx}
companies: [{id: 1,name: company1,price: 200W},{id: 2,name: company2,price: 500W}]
注意在:的后面有一个空格
key: {key1: value1, key2: value2}
数组
以 - 开头的行表示构成一个数组:
pets:
-cat
-dog
-pig
pets: [cat,dog,pig]
复杂例子
companies:
-
id: 1
name: company1
price: 200W
-
id: 2
name: company2
price: 500W
companies 属性是一个数组,每一个数组元素又是由 id、name、price 三个属性构成
通过Yaml 给属性赋值
SpringBoot使用一个全局配置文件,配置文件名固定:
application.properties
语法结构:key=value
application.yaml(推荐)
语法结构:key:(空格) value
可以用注解@Value直接给实体类赋值: 直接在实体类的属性上方@Value(“xxx”)即可,这是比较经典的方法
通过 @ConfigurationProperties(prefix = "x'x'x'x") 将对象与yaml配置文件中的对象绑定进行赋值
application.yml
person:
name: "line"
age: 18
birth: 2021/03/26
happy: true
maps: {k1: v1,k2: v2}
lists:
- l1
- l2
- l3
dog:
name: dog
age: 3
cat:
name: cat
age: 4
实体类
package com.example.SpringBoot01.pojo;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import java.util.Date;
import java.util.List;
import java.util.Map;
@Component
//通过prefix = "person" 进行绑定
@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 Dog dog;
private Cat cat;
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
", happy=" + happy +
", birth=" + birth +
", maps=" + maps +
", lists=" + lists +
", dog=" + dog +
", cat=" + cat +
'}';
}
public Person(){};
public Person(String name, Integer age, Boolean happy, Date birth, Map<String, Object> maps, List<Object> lists, Dog dog, Cat cat) {
this.name = name;
this.age = age;
this.happy = happy;
this.birth = birth;
this.maps = maps;
this.lists = lists;
this.dog = dog;
this.cat = cat;
}
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 Boolean getHappy() {
return happy;
}
public void setHappy(Boolean happy) {
this.happy = happy;
}
public Date getBirth() {
return birth;
}
public void setBirth(Date birth) {
this.birth = birth;
}
public Map<String, Object> getMaps() {
return maps;
}
public void setMaps(Map<String, Object> maps) {
this.maps = maps;
}
public List<Object> getLists() {
return lists;
}
public void setLists(List<Object> lists) {
this.lists = lists;
}
public Dog getDog() {
return dog;
}
public void setDog(Dog dog) {
this.dog = dog;
}
public Cat getCat() {
return cat;
}
public void setCat(Cat cat) {
this.cat = cat;
}
}
松散绑定
在yaml中的first-name可以赋值给实体类对象的firstName。
-连接符可以赋值给对应的驼峰命名属性。
JSR303检验
导入依赖
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>5.2.4.Final</version>
</dependency>
使用
使用@Validated开启数据校验
@Component
@Validated
public class Person {
@Email(message = "NOOOOOOOOOOOOOOOOOOOOOOO")
private String name;
}
使用@Email 对属性进行email的校验
@Email有一个message属性,通过修改message的值可以修改显示的错误提示