springboot之YAML语法

目录

一、基本语法

写一个端口号和一个路径

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里的方法:

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
@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
@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
@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

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
@Controller
@RequestMapping("/test")
public class TestController {@Autowiredprivate Person person;@RequestMapping("/hello")@ResponseBodypublic String sayHello(){System.out.println(person);return "say Hello";}
}
运行访问

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

Person实体类
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
@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
@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
@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
@Controller
@RequestMapping("/pets")
public class PetsListController {@Autowiredprivate PetsList petsList;@RequestMapping("/list")@ResponseBodypublic String petsList(){System.out.println(petsList);return "list";}
}

运行访问:

数组类型例子数组2

配置文件

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

Pets类
@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
@Controller
@RequestMapping("/pet")
public class PetController {@Autowiredprivate Pets pets;@ResponseBody@RequestMapping("/pets")public String pets(){System.out.println(pets);return "数组";}}
运行:

 

5.对象里面含对象

配置文件

配置类PersonDog

@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

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

@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类
@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不变
@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不变
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类

需要加校验注解

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.mzph.cn/news/893118.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ASP .NET Core 学习 (.NET 9)- 创建 API项目,并配置Swagger及API 分组或版本

本系列为个人学习 ASP .NET Core学习全过程记录&#xff0c;基于.NET 9 和 VS2022 &#xff0c;实现前后端分离项目基础框架搭建和部署&#xff0c;以简单、易理解为主&#xff0c;注重页面美观度和后台代码简洁明了&#xff0c;可能不会使用过多的高级语法和扩展&#xff0c;后…

LuaJIT Garbage Collector Algorithms

Explain 本篇文章是对Make Pall发表wili内容《LuaJIT 3.0 new Garbage Collector》的翻译和扩展&#xff0c;因为原文是对LuaJIT 2.x GC重要功能的简介和对LuaJIT 3.0 new GC的工作计划&#xff0c;所以它并不是系统性介绍GC的文章。希望以后能有精力系统性的对LuaJIT 2.x GC做…

ChatGPT大模型极简应用开发-CH1-初识 GPT-4 和 ChatGPT

文章目录 1.1 LLM 概述1.1.1 语言模型和NLP基础1.1.2 Transformer及在LLM中的作用1.1.3 解密 GPT 模型的标记化和预测步骤 1.2 GPT 模型简史&#xff1a;从 GPT-1 到 GPT-41.2.1 GPT11.2.2 GPT21.2.3 GPT-31.2.4 从 GPT-3 到 InstructGPT1.2.5 GPT-3.5、Codex 和 ChatGPT1.2.6 …

基于单片机的直流电机控制系统(论文+源码)

1 系统方案设计 本设计基于单片机的直流电机控制系统的总体架构设计如图2.1所示&#xff0c;其采用STM32F103单片机作为控制器&#xff0c;结合ESP8266 WiFi通信模块、L9110电机驱动电路、OLED液晶、按键等构成整个系统。用户在使用时&#xff0c;可以通过按键或者手机APP设定直…

【Linux】Linux入门(2)常见指令

目录 Linux下的文件ls 指令 --- 展示目录pwd指令 --- 显示当前目录cd 指令 --- 改变工作目录touch指令 --- 创建普通文件stat指令 --- 查看文件属性mkdir指令 --- 创建目录rmdir指令 --- 删除目录rm指令 --- 同时删除文件或目录man指令 --- 访问帮助手册cp指令 复制文件或目录m…

《自动驾驶与机器人中的SLAM技术》ch4:基于预积分和图优化的 GINS

前言&#xff1a;预积分图优化的结构 1 预积分的图优化顶点 这里使用 《自动驾驶与机器人中的SLAM技术》ch4&#xff1a;预积分学 中提到的散装的形式来实现预积分的顶点部分&#xff0c;所以每个状态被分为位姿&#xff08;&#xff09;、速度、陀螺零偏、加计零偏四种顶点&am…

BMC知识框图

OpenBMC简介 OpenBMC作为BMC的Linux发行版&#xff0c;旨在管理广泛系统&#xff0c;如企业、高性能计算、电信和大规模数据中心。 BMC&#xff0c;或Baseboard Manager Controller&#xff0c;是服务器主板上的专用微控制器&#xff0c;采用IPMI架构&#xff0c;具备智能性&…

书生大模型基础岛第五关

基础任务&#xff1a;使用 XTuner 微调 InternLM2-Chat-7B 实现自己的小助手认知&#xff0c;如下图所示&#xff08;图中的尖米需替换成自己的昵称&#xff09;&#xff0c;记录复现过程并截图。 1.配置环境 2.修改数据&#xff0c;将尖米修改为人工智能小助手 修改之前 修改…

EI Scopus双检索 | 2025年第四届信息与通信工程国际会议(JCICE 2025)

会议简介 Brief Introduction 2025年第四届信息与通信工程国际会议(JCICE 2025) 会议时间&#xff1a;2025年7月25日-27日 召开地点&#xff1a;中国哈尔滨 大会官网&#xff1a;www.jcice.org 由黑龙江大学和成都信息工程大学主办&#xff0c;江苏科技大学协办的2025年第四届信…

于灵动的变量变幻间:函数与计算逻辑的浪漫交织(下)

大家好啊&#xff0c;我是小象٩(๑ω๑)۶ 我的博客&#xff1a;Xiao Xiangζั͡ޓއއ 很高兴见到大家&#xff0c;希望能够和大家一起交流学习&#xff0c;共同进步。 这一节我们主要来学习单个函数的声明与定义&#xff0c;static和extern… 这里写目录标题 一、单个函数…

Python Pyside6 加Sqlite3 写一个 通用 进销存 系统 初型

图: 说明: 进销存管理系统说明文档 功能模块 1. 首页 显示关键业务数据商品总数供应商总数本月采购金额本月销售金额显示预警信息库存不足预警待付款采购单待收款销售单2. 商品管理 商品信息维护商品编码(唯一标识)商品名称规格型号单位分类进货价销售价库存数量预警…

2025西湖论剑-babytrace

前言 就做了下题目&#xff0c;pwn1/3 都是签到&#xff0c;pwn2 后面绕 ptrace 有点意思&#xff0c;简单记录一下 漏洞分析 子进程中的读/写功能没有检查负数的情况&#xff0c;存在越界读写&#xff1a; void __fastcall get_value(__int64 *int64_arr) {__int64 ll; //…

西门子【Library of Basic Controls (LBC)基本控制库”(LBC) 提供基本控制功能】

AF架构中使用的库 文章目录 Table of contents Legal information ..............................................................................................................................2 1 Introduction ................................................…

Phi小模型开发教程:用C#开发本地部署AI聊天工具,只需CPU,不需要GPU,3G内存就可以运行,不输GPT-3.5

大家好&#xff0c;我是编程乐趣。 行业诸多大佬一直在说&#xff1a;“‌2025年将是AI应用元年‌”&#xff0c;虽然说大佬的说法不一定对&#xff0c;但AI趋势肯定没错的。 对于我们程序员来说&#xff0c;储备AI应用开发技能&#xff0c;不管对找工作、接项目、创业肯定是…

python-leetcode-存在重复元素 II

219. 存在重复元素 II - 力扣&#xff08;LeetCode&#xff09; class Solution:def containsNearbyDuplicate(self, nums: List[int], k: int) -> bool:seen set()for i, num in enumerate(nums):if num in seen:return Trueseen.add(num)if len(seen) > k:seen.remove…

如何将本地 Node.js 服务部署到宝塔面板:完整的部署指南

文章简介&#xff1a; 将本地开发的 Node.js 项目部署到线上服务器是开发者常见的工作流程之一。在这篇文章中&#xff0c;我将详细介绍如何将本地的 Node.js 服务通过宝塔面板&#xff08;BT 面板&#xff09;上线。宝塔面板是一个强大的服务器管理工具&#xff0c;具有简洁的…

1月15学习

[SWPUCTF 2018]SimplePHP phar反序列化的三个前提条件 可以上传phar文件 有可以利用的魔术方法 文件操作函数的参数可控 网站中有两个功能&#xff1a;查看文件和上传文件&#xff0c;利用查看文件将源码都先弄下来进行PHP代码审计。 可以看到存在任意文件读取漏洞&#xff0…

【网络 MAC 学习专栏 -- 如何理解 PHY 的 Link Up】

请阅读【嵌入式开发学习必备专栏 Cache | MMU | AMBA BUS | CoreSight | Trace32 | CoreLink | ARM GCC | CSH】 文章目录 OverviewClause 22/Clause 45Clause 22Clause 45 PHY Link 状态的软件实现 转自&#xff1a; 开心果 Need Car 2022年10月20日 09:50 上海 Overview PHY…

慧集通(DataLinkX)iPaaS集成平台-系统管理之用户及权限

系统用户 通过左侧菜单栏【系统管理】→【用户及权限】→【系统用户】进入到系统用户维护的主界面&#xff0c;在该界面我们可以看到已经维护好的系统用户&#xff0c;以及一些关于系统用户的功能按钮&#xff0c;有新建、编辑、删除、停用、启用、解锁等。 新建&#xff1a;在…

【机器学习实战入门】基于深度学习的乳腺癌分类

什么是深度学习&#xff1f; 作为对机器学习的一种深入方法&#xff0c;深度学习受到了人类大脑和其生物神经网络的启发。它包括深层神经网络、递归神经网络、卷积神经网络和深度信念网络等架构&#xff0c;这些架构由多层组成&#xff0c;数据必须通过这些层才能最终产生输出。…