一、基本使用

1、ymal语法是一种更符合人类命名习惯的语法:

#    1. 一个家庭有爸爸、妈妈、孩子。
# 2. 这个家庭有一个名字(family-name)叫做“happy family”
# 3. 爸爸有名字(name)和年龄(age)两个属性
# 4. 妈妈有两个别名和年龄,妈妈的年龄和爸爸一样
# 5. 孩子除了名字(name)和年龄(age)两个属性,还有一个friends的集合
# 6. 每个friend有两个属性:hobby(爱好)和性别(sex) family:
family-name: happly family
dad:
name: levi
age: 50 #${random.int} 随机数的值是不能传递的
mom:
alias:
- yilisha
- alise
age: ${family.dad.age} #妈妈的年龄和爸爸相同,没有则默认为24岁
child:
name: happlyboy
age: 5
friends:
- {hobby: baseball,sex: male}
- {hobby: football,sex: famale} #数组的另一种表达方式:
# - hobby: baseball
# sex: male
# - hobby: football
# sex: famale

测试该类的读取方式:

单个实体类:


@Data
public class Friend {
private String hobby; private String name; }
@Data
public class Mom {
private List<String> alias;
private int age;
}
@Data
public class Child { private int age; private List<Friend> friends; }

@Data
public class Dad {
private String name; private int age; }

Family类

@Data
@Component
@ConfigurationProperties(prefix = "family") //用于注入对象
public class Family {
//@Value("${family.family-name}") 用于注入单个熟悉
private String familyName;
private Dad dad;
private Mom mom;
private Child child; }

两种方式的区别:

创建测试类:

测试类所在包名需要和代码包名一致,否则注入报错:

@RunWith(SpringRunner.class)
@SpringBootTest
public class TestYml { @Autowired
Family family; @Test
public void hello(){ System.out.println(family.toString());
}
}

运行测试类结果:

2、使用注意事项:

规则1:字符串的单引号与双引号

  • 双引号;不会转义字符串里面的特殊字符;特殊字符会作为本身想表示的意思,如:
    ​ name: “zhangsan \n lisi”:输出;zhangsan 换行 lisi

  • 单引号;会转义特殊字符,特殊字符最终只是一个普通的字符串数据,如:
    ​ name: ‘zhangsan \n lisi’:输出;zhangsan \n lisi

规则2:支持松散的语法

family-name = familyName = family_name

随机数占位符

${random.value}
${random.int}
${random.long}
${random.int(10)}
${random.int[1024,65536]}

占位符获取之前配置的值,如果没有可以是用“冒号”指定默认值
格式例如,xxxxx.yyyy是属性层级及名称,如果该属性不存在,冒号后面填写默认值

${xxxxx.yyyy:默认值}

二、数据验证:

在需要校验的属性装配类上加@Validated注解,只有加上才会触发数据校验
@Validated注解的在此处的作用是配合@ConfigurationProperties进行属性校验:

具体使用例子:

@size (min=6, max=20, message="密码长度只能在6-20之间")
@pattern (regexp="[a-za-z0-9._%+-]+@[a-za-z0-9.-]+\.[a-za-z]{2,4}", message="请输入正确的邮件格式")
@Length(min = 5, max = 20, message = "用户名长度必须位于5到20之间")
@Email(message = "请输入正确的邮箱")
@NotNull(message = "用户名称不能为空")
@Max(value = 100, message = "年龄不能大于100岁")
@Min(value= 18 ,message= "必须年满18岁!" )
@AssertTrue(message = "bln4 must is true")
@AssertFalse(message = "blnf must is falase")
@DecimalMax(value="100",message="decim最大值是100")
@DecimalMin(value="100",message="decim最小值是100")
@NotNull(message = "身份证不能为空")
@Pattern(regexp="^(\d{18,18}|\d{15,15}|(\d{17,17}[x|X]))$", message="身份证格式错误")

@Data
public class Dad {
private String name; private int age; }

springboot2.0入门(六)-- ymal语法、数据校验的更多相关文章

  1. 《Java从入门到放弃》入门篇:springMVC数据校验

    昨天我们扯完了数据传递,今天我们来聊聊数据校验的问题.来,跟着我一起读:计一噢叫,一按艳. 在springMVC中校验数据也非常简单,spring3.0拥有自己独立的数据校验框架,同时支持JSR303 ...

  2. Springboot2.0入门介绍

    Springboot目前已经得到了很广泛的应用,why这么牛逼? Springboot让你更容易上手,简单快捷的构建Spring的应用 Spring Boot让我们的Spring应用变的更轻量化.比如 ...

  3. springboot2.0入门(一)----springboot 简介

    一.springboot解决了什么? 避免了繁杂的xml配置,框架自动帮我们完成了相关的配置,当我们需要进行相关插件集成的时候,只需要将相关的starter通过相关的maven依赖引进,并可以进行相关 ...

  4. springboot2.0入门(五)--swagger2接口API构建

    一.特点 代码变,文档变.只需要少量的注解,Swagger 就可以根据代码自动生成 API 文档,很好的保证了文档的时效性. 跨语言性,支持 40 多种语言. Swagger UI 呈现出来的是一份可 ...

  5. springboot2.0入门(四)----mock模拟测试+单元测试

    一.本节主要记录模拟测试.单元测试: 二.mock 测试 1.1什么是Mock? 在面向对象程序设计中,模拟对象(英语:mock object,也译作模仿对象)是以可控的方式模拟真实对象行为的假的对象 ...

  6. springboot2.0入门(九)-- springboot使用mybatis-generator自动代码生成

    一.配置文件引入 插件引入,引入 <plugin> <groupId>org.mybatis.generator</groupId> <artifactId& ...

  7. springboot2.0入门(八)-- profile启动文件配置

    一.不同环境使用不同配置文件 将application.yml文件拷贝三份,在文件末尾分别对应开发/生产/测试,dev/prod/test/文件夹,其中application.yml 中默认激活开发环 ...

  8. springboot2.0入门(七)-- 自定义配置文件+xml配置文件引入

    一.加载自定义配置文件: 1.新建一个family.yam文件,将上application.yml对象复制进入family family: family-name: dad: name: levi a ...

  9. springboot2.0入门(三)----定义编程风格+jackjson使用+postMan测试

    一.RESTFul风格API 1.优点: )看Url就知道要什么资源 )看http method就知道针对资源干什么 )看http status code就知道结果如何 HTTP方法体现对资源的操作: ...

随机推荐

  1. Redis SETNX实现分布式锁

    1.某进程1执行 SETNX lock 以尝试获取锁 2.由于某进程2已获得了锁,所以进程1执行 SETNX lock 返回0,即获取锁失败 3.进程1执行 GET lock 来检测锁是否已超时,如果 ...

  2. c# sqlite 导入,升级

    导入sqlite库 1.下载nupkg 安装包 http://system.data.sqlite.org/index.html/doc/trunk/www/downloads.wiki 记得.net ...

  3. 抽象类 and 接口

    目录 抽象类 抽象类的域和方法的权限: 接口 接口中的域和方法的权限: 实现多个接口 接口继承 接口嵌套 抽象类 一个类,如果有抽象方法(没有方法体),则该类必须被限定为抽象类(abstract):当 ...

  4. Excel常见文本清洗函数

    1.=LEFT(text,[num_chars]) ​ 函数RIGHT具有相似功能 例如选出K列中,从左数前一个字符:= LEFT(k2,1) 2.=FIND(find_text,within_tex ...

  5. jenkins sonarqube 代码检测部署

    install pgsql and sonarqube docker run --name postgresqldb -e POSTGRES_USER=sonar -e POSTGRES_PASSWO ...

  6. mac OS 安装qt环境

    先安装xcode,然后从官网下载dmg安装包安装即可,这里主要出现一个问题就是创建的工程没法编译,提示没有构建包(kit) 要安装command line tool才行. 在命令行中输入: xcode ...

  7. 【动态规划】Überwatch

    Überwatch 题目描述 The lectures are over, the assignments complete and even those pesky teaching assista ...

  8. 少儿编程Scratch第四讲:射击游戏的制作,克隆的奥秘

    上周的宇宙大战射击游戏中,我们只完成了宇宙飞船发射子弹的部分.还未制作敌对方.这周制作了敌方-飞龙,飞龙随机在屏幕上方出现,如果被子弹打中,则得分,飞龙和子弹都消失. 敌方:飞龙:计分. 目的 目的: ...

  9. 学界 | 华为诺亚方舟实验室提出新型元学习法 Meta-SGD ,在回归与分类任务中表现超群

    学界 | 华为诺亚方舟实验室提出新型元学习法 Meta-SGD ,在回归与分类任务中表现超群 机器之心发表于机器之心订阅 499 广告关闭 11.11 智慧上云 云服务器企业新用户优先购,享双11同等 ...

  10. python几个轻量级web框架

    python几个轻量级web框架 2016-04-11 18:04:34 惹不起的程咬金 阅读数 7944更多 分类专栏: 云计算/大数据/并行计算 Python   我最近发表了一篇名为 ‘7 Mi ...