springboot之YAML语法

server/2025/1/22 15:32:55/

目录

一、基本语法

写一个端口号和一个路径

Controller里的方法:

然后这样写才能访问到:

这是在yml里面写的,也可以写在properties里

再访问:

二、值的写法

1.普通类型(数字、字符串、布尔)

例子1:

配置文件:

Controller

运行访问:

例子2:

配置文件:

Controller

运行访问:

例子3:

配置文件:

controller

运行访问

2.字符串默认不用加上单引号/双引号

""例子:

配置文件

controller

运行访问

''例子:

配置文件

controller

运行访问

3.对象、Map(属性和值)(键值对)

对象类型例子(第一种方式)

配置文件

实体类Person

Controller

运行访问

对象类型例子(第二种方式)

Person实体类

再访问:

对象类型例子(行内写法)

对象类型例子(properties)

Map类型例子

配置文件

实体类PersonMap

Controller

4.数组(List、Set)

数组类型例子List1

配置文件

配置类PetsList

Controller

数组类型例子数组2

配置文件

Pets类

PetController

运行:

5.对象里面含对象

配置文件

配置类PersonDog

Dog

Controller

运行

6.@Value获取值和@ConfigurationProperties获取值比较 

复杂类型封装

配置文件

PersonDog类

PersonDogController不变

运行

SpEL

JSR303数据校验

例子@Value:

依赖

配置文件

Person类

Controller不变

运行

现在把配置文件中的email: 123@qq.com改成email: 123

例子@ConfigurationProperties

配置文件

Person类

现在把配置文件中的email: 123@qq.com改成email: 123

复杂数据类型

7.编写配置提示

8.还支持运算

配置文件

Person类

运行:


一、基本语法

key:(空格)value :表示一对键值对(空格必须有);

以空格的缩进来控制层级关系;只要是左对齐的一列数据,都是同一个层级的

写一个端口号和一个路径

server:port: 8081servlet:context-path: /springboot05

Controller里的方法:

java">import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;import javax.servlet.http.HttpServletResponse;
import java.io.IOException;@Controller
@RequestMapping("/index")
public class IndexController {@ResponseBody@RequestMapping("/hello")public String hello(){return "hai!";}
}

然后这样写才能访问到:

这是在yml里面写的,也可以写在properties里

再访问:

原来的路径报错

得这样写才行

二、值的写法

1.普通类型(数字、字符串、布尔)

key:value  字面直接来写

例子1:

配置文件:

Controller
java">@Controller
@RequestMapping("/test")
public class TestController {@Value("${name}")private String name;@RequestMapping("/hello")@ResponseBodypublic String sayHello(){System.out.println(name);return "say Hello";}
}
运行访问:

例子2:

配置文件:

Controller
java">@Controller
@RequestMapping("/test")
public class TestController {@Value("${name}")private String name;@Value("${age}")private String age;@RequestMapping("/hello")@ResponseBodypublic String sayHello(){System.out.println(name);System.out.println(age);return "say Hello";}
}
运行访问:

例子3:

配置文件:

controller
java">@Controller
@RequestMapping("/test")
public class TestController {@Value("${name}")private String name;@Value("${age}")private String age;@Value("${boss}")private String boss;@RequestMapping("/hello")@ResponseBodypublic String sayHello(){System.out.println(name);System.out.println(age);System.out.println(boss);return "say Hello";}
}
运行访问

2.字符串默认不用加上单引号/双引号

"":双引号;不会转义字符串里面的特殊字符;特殊字符会作为本身想表示的意思

name: "zhangsan \n lisi":输出;zhangsan 换行 lisi

""例子:

配置文件

controller

Controller跟 1.普通的值例子1  里面的一样,没有变

运行访问

'':单引号;会转义特殊字符,特殊字符最终只是一个普通的字符串数据

name: ‘zhangsan \n lisi’:输出;zhangsan \n lisi

''例子:

配置文件

controller

Controller跟 1.普通的值例子1   里面的一样,没有变

运行访问

3.对象、Map(属性和值)(键值对)

key: value :在下一行来写对象的属性和值的关系;注意缩进

对象还是k: v的方式

行内写法:

对象类型例子(第一种方式)

配置文件

实体类Person
java">
package com.qcby.springboot05.controller;import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;//@Value是spring的东西,new肯定不行,所以得把它交给spring去管理,所以加个@Component注解
@Component
public class Person {@Value("${person.name}")private String name;@Value("${person.age}")private Integer age;@Value("${person.boss}")private Boolean boss;public Person() {}public Person(String name, Integer age, Boolean boss) {this.name = name;this.age = age;this.boss = boss;}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 getBoss() {return boss;}public void setBoss(Boolean boss) {this.boss = boss;}@Overridepublic String toString() {return "Person{" +"name='" + name + '\'' +", age=" + age +", boss=" + boss +'}';}
}
Controller
java">@Controller
@RequestMapping("/test")
public class TestController {@Autowiredprivate Person person;@RequestMapping("/hello")@ResponseBodypublic String sayHello(){System.out.println(person);return "say Hello";}
}
运行访问

对象类型例子(第二种方式)

Person实体类
java">import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;//第一种方式:
// @Value是spring的东西,new肯定不行,所以得把它交给spring去管理,所以加个@Component注解
@Component
//第二种方式
// 加一个前缀,是springBoot的注解ConfigurationProperties;括号里面不加东西,默认是value
//写上的话就是prefix  (prefix="person")
//下面的@Value不用写了
@ConfigurationProperties("person")
public class Person {//@Value("${person.name}")private String name;//@Value("${person.age}")private Integer age;//@Value("${person.boss}")private Boolean boss;public Person() {}public Person(String name, Integer age, Boolean boss) {this.name = name;this.age = age;this.boss = boss;}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 getBoss() {return boss;}public void setBoss(Boolean boss) {this.boss = boss;}@Overridepublic String toString() {return "Person{" +"name='" + name + '\'' +", age=" + age +", boss=" + boss +'}';}
}
再访问:

对象类型例子(行内写法)

这样也是能访问到的

对象类型例子(properties)

写到application.properties里面也是一样的

运行

第一次控制台输出的时候 张三 是 ??,编码问题,解决:

Map类型例子

用的@ConfigurationProperties的方式

配置文件

实体类PersonMap
java">@Component
@ConfigurationProperties(prefix = "my")
public class PersonMap {private Map<String, String> map;public Map<String, String> getMap() {return map;}public void setMap(Map<String, String> map) {this.map = map;}@Overridepublic String toString() {return "PersonMap{" +"map=" + map +'}';}
}
Controller
java">@Controller
@RequestMapping("/api")
public class PersonMapController {@Autowiredprivate PersonMap personMap;@RequestMapping("/map")@ResponseBodypublic String getMap() {System.out.println(personMap);return "map";}
}

运行访问:

4.数组(List、Set)

用- 值表示数组中的一个元素

数组类型例子List1

配置文件

配置类PetsList
java">@Component
@ConfigurationProperties(prefix = "my1")
public class PetsList {private List<String> pets;public PetsList() {}public PetsList(List<String> pets) {this.pets = pets;}public List<String> getPets() {return pets;}public void setPets(List<String> pets) {this.pets = pets;}@Overridepublic String toString() {return "PetsList{" +"pets=" + pets +'}';}
}
Controller
java">@Controller
@RequestMapping("/pets")
public class PetsListController {@Autowiredprivate PetsList petsList;@RequestMapping("/list")@ResponseBodypublic String petsList(){System.out.println(petsList);return "list";}
}

运行访问:

数组类型例子数组2

配置文件

配置文件这里用{}不行,输出为null,必须用[]

Pets类
java">@Component
@ConfigurationProperties(prefix = "my2")
public class Pets {private String[] pets;public String[] getPets() {return pets;}public void setPets(String[] pets) {this.pets = pets;}@Overridepublic String toString() {return "Pets{" +"pets=" + Arrays.toString(pets) +'}';}
}
PetController
java">@Controller
@RequestMapping("/pet")
public class PetController {@Autowiredprivate Pets pets;@ResponseBody@RequestMapping("/pets")public String pets(){System.out.println(pets);return "数组";}}
运行:

 

5.对象里面含对象

配置文件

配置类PersonDog

java">@Component
@ConfigurationProperties(prefix = "person1")
public class PersonDog {private String name;private int age;private Dog dog;public PersonDog() {}public PersonDog(String name, int age, Dog dog) {this.name = name;this.age = age;this.dog = dog;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public Dog getDog() {return dog;}public void setDog(Dog dog) {this.dog = dog;}@Overridepublic String toString() {return "PersonDog{" +"name='" + name + '\'' +", age=" + age +", dog=" + dog +'}';}
}

Dog

java">public class Dog {private String name;private int age;public Dog() {}public Dog(String name, int age) {this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}@Overridepublic String toString() {return "Dog{" +"name='" + name + '\'' +", age=" + age +'}';}
}

Controller

java">@Controller
@RequestMapping("/person")
public class PersonDogController {@Autowiredprivate PersonDog personDog;@RequestMapping("/dog")@ResponseBodypublic String sayHello(){System.out.println(personDog);return "对象里面含对象";}
}

运行

6.@Value获取值和@ConfigurationProperties获取值比较 

@ConfigurationProperties

@Value

功能

批量注入配置文件中的属性

一个个指定

松散绑定(松散语法)

支持

不支持

SpEL

不支持

支持

JSR303数据校验

支持

不支持

复杂类型封装

支持

不支持

复杂类型封装

支持的写过了,就是上面的对象里面含对象、数组那的也算、Map什么的,现在写不支持的

配置文件

PersonDog类
java">@Component
public class PersonDog {@Value("${person1.name}")private String name;@Value("${person1.age}")private int age;@Value("${person1.dog}")private Dog dog;public PersonDog() {}public PersonDog(String name, int age, Dog dog) {this.name = name;this.age = age;this.dog = dog;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public Dog getDog() {return dog;}public void setDog(Dog dog) {this.dog = dog;}@Overridepublic String toString() {return "PersonDog{" +"name='" + name + '\'' +", age=" + age +", dog=" + dog +'}';}
}
PersonDogController不变
java">@Controller
@RequestMapping("/person")
public class PersonDogController {@Autowiredprivate PersonDog personDog;@RequestMapping("/dog")@ResponseBodypublic String sayHello(){System.out.println(personDog);return "复杂类型封装";}
}
运行

报错了,可见不支持

SpEL

@Value里面支持${person.name}这种写法

JSR303数据校验

比如有一个属性email(配置文件里也有哈),如果使用的是@Value,它是不支持@Email进行表单数据校验的

例子@Value:
依赖

要写数据校验,需要引入依赖

<!-- 导入字段校验:hiberrate validator -->
<dependency><groupId>org.hibernate</groupId><artifactId>hibernate-validator</artifactId><version>5.3.6.Final</version>
</dependency>
配置文件

Person类

Controller不变
java">import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;@Controller
@RequestMapping("/test")
public class TestController {@Autowiredprivate Person person;@RequestMapping("/hello")@ResponseBodypublic String sayHello(){System.out.println(person);return "say Hello";}
}
运行

现在把配置文件中的email: 123@qq.com改成email: 123

没有报错,直接输出了,可见@Value是不支持数据校验的

例子@ConfigurationProperties
配置文件

Person类

需要加校验注解

java">import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import org.springframework.validation.annotation.Validated;import javax.validation.constraints.Email;@Component
@ConfigurationProperties("person")
@Validated     //校验注解
public class Person {private String name;private Integer age;private Boolean boss;@Emailprivate String email;public Person() {}public Person(String name, Integer age, Boolean boss, String email) {this.name = name;this.age = age;this.boss = boss;this.email = email;}public String getEmail() {return email;}public void setEmail(String email) {this.email = email;}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 getBoss() {return boss;}public void setBoss(Boolean boss) {this.boss = boss;}@Overridepublic String toString() {return "Person{" +"name='" + name + '\'' +", age=" + age +", boss=" + boss +", email=" + email +'}';}
}

controller跟例子1一样,启动运行

现在把配置文件中的email: 123@qq.com改成email: 123

再启动:

复杂数据类型

比如数组、map等这些,@ Value都是不支持的

Map:

数组

7.编写配置提示

加一个依赖

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId><optional>true</optional>
</dependency>

然后crtl+f9,把原来配置文件中的东西注释掉,现在重新写就有提示了:(就是得先有那个实体类)

8.还支持运算

配置文件

Person类

运行:


http://www.ppmy.cn/server/160495.html

相关文章

5、艰难的选择

“ 你好&#xff0c;我想让身体变得更健康一些。怎么办&#xff1f; ” “ 每天慢跑 8 公里。 ” “ 太麻烦了&#xff01;算了&#xff0c;以后再说吧。 ” …… “大夫你好&#xff0c;这病花多少钱都无所谓&#xff01;只要能治好&#xff0c;倾家荡产都 行。 ” 多数组…

第17个项目:Python烟花秀

源码下载地址:https://download.csdn.net/download/mosquito_lover1/90295693 核心源码: import pygame import random import math from PIL import Image import io # 初始化pygame pygame.init() # 设置窗口 WIDTH = 800 HEIGHT = 600 screen = pygame.display.s…

免费为企业IT规划WSUS:Windows Server 更新服务 (WSUS) 之快速入门教程(一)

哈喽大家好&#xff0c;欢迎来到虚拟化时代君&#xff08;XNHCYL&#xff09;&#xff0c;收不到通知请将我点击星标&#xff01;“ 大家好&#xff0c;我是虚拟化时代君&#xff0c;一位潜心于互联网的技术宅男。这里每天为你分享各种你感兴趣的技术、教程、软件、资源、福利…

嵌入式Linux驱动开发之从设备树到点亮LED

关键词&#xff1a;设备树 rk3399 嵌入式Linux 设备树是什么 一种描述硬件数据结构的机制它是数据结构或者语言设备树的实体表现是设备树文件.dtsi和.dts 设备树的作用 将硬件信息都描述在设备树文件内&#xff0c;供驱动程序调用 设备树可以描述的硬件数据包括哪些 设备…

JS宏进阶:正则表达式介绍

正则表达式&#xff08;Regular Expression&#xff09;是一种用于匹配字符串中字符组合的模式。它使用特定的语法和字符&#xff0c;可以高效地查找、替换或验证字符串中符合规则的内容。正则表达式在许多编程语言中都有广泛的应用&#xff0c;JavaScript也不例外。 一、正则…

【开源免费】基于SpringBoot+Vue.JS夕阳红公寓管理系统(JAVA毕业设计)

本文项目编号 T 146 &#xff0c;文末自助获取源码 \color{red}{T146&#xff0c;文末自助获取源码} T146&#xff0c;文末自助获取源码 目录 一、系统介绍二、数据库设计三、配套教程3.1 启动教程3.2 讲解视频3.3 二次开发教程 四、功能截图五、文案资料5.1 选题背景5.2 国内…

第01章 25 使用vtkUnstructuredGrid构建一个混合的表面

下面是一个使用C和VTK库的代码示例&#xff0c;演示如何使用vtkUnstructuredGrid构建一个混合表面。该表面包含不同的几何形状&#xff0c;例如三角形、四边形和多边形。 #include <vtkSmartPointer.h> #include <vtkUnstructuredGrid.h> #include <vtkPoints.…

什么是三高架构?

大家好&#xff0c;我是锋哥。今天分享关于【什么是三高架构?】面试题。希望对大家有帮助&#xff1b; 什么是三高架构? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 “三高架构”通常是指高可用性&#xff08;High Availability&#xff09;、高性能&#xff…