一、基本使用

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

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

测试该类的读取方式:

单个实体类:

  1.  
  1. @Data
    public class Friend {
    private String hobby;
  2.  
  3. private String name;
  4.  
  5. }
  6.  
  1. @Data
    public class Mom {
    private List<String> alias;
    private int age;
    }
  1. @Data
  2. public class Child {
  3.  
  4. private int age;
  5.  
  6. private List<Friend> friends;
  7.  
  8. }
  1.  
  1. @Data
  2. public class Dad {
  3. private String name;
  4.  
  5. private int age;
  6.  
  7. }
  1.  

Family类

  1. @Data
  2. @Component
  3. @ConfigurationProperties(prefix = "family") //用于注入对象
  4. public class Family {
  5. //@Value("${family.family-name}") 用于注入单个熟悉
  6. private String familyName;
  7. private Dad dad;
  8. private Mom mom;
  9. private Child child;
  10.  
  11. }

两种方式的区别:

创建测试类:

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

  1. @RunWith(SpringRunner.class)
  2. @SpringBootTest
  3. public class TestYml {
  4.  
  5. @Autowired
  6. Family family;
  7.  
  8. @Test
  9. public void hello(){
  10.  
  11. System.out.println(family.toString());
  12. }
  13. }

运行测试类结果:

2、使用注意事项:

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

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

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

规则2:支持松散的语法

family-name = familyName = family_name

随机数占位符

  1. ${random.value}
  2. ${random.int}
  3. ${random.long}
  4. ${random.int(10)}
  5. ${random.int[1024,65536]}

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

  1. ${xxxxx.yyyy:默认值}

二、数据验证:

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

具体使用例子:

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

  1. @Data
    public class Dad {
    private String name;
  2.  
  3. private int age;
  4.  
  5. }

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. JDBC 注册驱动,获取连接

    jdbc 动力节点视频教程 JDBC编程六步 1.注册驱动(作用:告诉Java程序,即将要连接的是哪个品牌的数据库) 2.获取连接 (表示JVM进程和数据库进程之间的通道打开了,属于进程间的通信,重量 ...

  2. css 水平垂直居中 & vertical-align

    前言:这是笔者学习之后自己的理解与整理.如果有错误或者疑问的地方,请大家指正,我会持续更新! 已知宽度的元素居中 position定位 + margin负值 绝对定位 + 4个方向全部`0px` + ...

  3. (四)Redis之哈希

    一.哈希常用命令 赋值 取值 删除 增加数字 判断字段是否存在 获取hash属性个数 获取hash所有属性名称 1.2.3 赋值取值和删除 package myRedis01; import java ...

  4. C#项目中窗体的ShowDialog()和show()的区别

    ShowDialog()弹出的窗体为模式化窗体: show()弹出的窗体为非模式化窗体: 模式化窗体与非模式化窗体的区别: 模式化窗体会使程序中断,直到关闭窗体: 打开窗体后不能替换到其他窗体: 子窗 ...

  5. 【原创】大叔经验分享(86)hive和mysql数据互导

    hive和mysql数据互导,首先想到的是sqoop,并且可以和调度框架(比如oozie等)配合配置定时任务,还有一种更简单的方式是通过spark-sql: CREATE OR REPLACE TEM ...

  6. python基础之迭代器协议和生成器(一)

    一 递归和迭代 二 什么是迭代器协议 1.迭代器协议是指:对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么就引起一个StopIteration异常,以终止迭代 (只能往后走不能往前 ...

  7. requests Use body.encode('utf-8') if you want to send it encoded in UTF-8

    基本环境 使用 requests 模块发送 post 请求,请求体包含中文报错 系统环境:centos7.3 python版本:python3.6.8 请求代码: // 得到中文 param_json ...

  8. KVM之virsh管理虚拟机CPU

    查看虚拟机CPU数量配置 [root@ubuntu ~]# virsh vcpucount centos_server01 maximum config 2 maximum live 2 curren ...

  9. eclipse导入项目后出现红色叉号的解决方案

    对于一名程序员来说,我导入的项目在项目的名称上无端加了一个红色的叉号,虽然这个不友好的符号,对于我整个的项目运行没有任何影响,但是总让我觉得不舒服,大大的叉号写在我的项目的脑袋上,我心里能舒服吗?于是 ...

  10. IntelliJ IDEA控制台启动Tomcat输出中文乱码问题

    IntelliJ IDEA控制台输出中文乱码问题 1. 先解决Tomcat中文乱码问题 参考  Tomcat 输出日志出现中文乱码 2. 解决Idea配置问题 打开IntelliJ IDEA本地安装目 ...