Springboot---学习过程---Springboot中yaml语法讲解和JSR303数据校验

Springboot—学习过程—Springboot中yaml语法讲解

1.SpringBoot使用一个全局的配置文件 , 配置文件名称是固定的

  1. application.properties语法结构 :key=value
  2. application.yml语法结构 :key:空格 value

2.yaml基础语法

说明:语法要求严格!

  1. 空格不能省略
  2. 以缩进来控制层级关系,只要是左边对齐的一列数据都是同一个层级的。
  3. 属性和值的大小写都是十分敏感的。
    例:
    server:
      prot: 8080
    
    例: 存对象,注意缩进
    student:
        name: qinjiang
        age: 3
    
    例: 存对象,行内写法
    student: {name: qinjiang,age: 3}
    

3.yaml可以直接给实体类赋值

例:

  1. 写一个复杂一点的实体类:Person 类

    @Component //注册bean到容器中
    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;
        
        //有参无参构造、get、set方法、toString()方法  
    }
    
  2. 使用yaml配置的方式进行注入

    person:
      name: qinjiang
      age: 3
      happy: false
      birth: 2000/01/01
      maps: {k1: v1,k2: v2}
      lists:
       - code
       - girl
       - music
      dog:
        name: 旺财
        age: 1
    
  3. 刚才已经把person这个对象的所有值都写好了,现在来注入到我们的类中

    /*
    @ConfigurationProperties作用:
    将配置文件中配置的每一个属性的值,映射到这个组件中;
    告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定
    参数 prefix = “person” : 将配置文件中的person下面的所有属性一一对应(绑定)
    */
    @Component //注册bean
    @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;
    }
    
    @SpringBootTest
    class DemoApplicationTests {
    
        @Autowired
        Person person; //将person自动注入进来
    
        @Test
        public void contextLoads() {
            System.out.println(person); //打印person信息
        }
    
    }	
    

    测试结果:在这里插入图片描述

4.加载指定的配置文件

  1. @PropertySource :加载指定的配置文件,会和value(可以获取配置文件中的值)一起使用;
  2. @configurationProperties:默认从全局配置文件中获取值;
  3. resources目录下新建一个person.properties文件
    name=kuangshen
    
  4. 在代码中指定加载person.properties文件
    @PropertySource(value = "classpath:person.properties")
    @Component //注册bean
    public class Person {
        @Value("${name}")
        private String name;
        ......  
    }
    
  5. 输出结果
    在这里插入图片描述

5.对比小结

  1. @Value这个使用起来并不友好!我们需要为每个属性单独注解赋值,比较麻烦;我们来看个功能对比图
    在这里插入图片描述

  2. @ConfigurationProperties只需要写一次即可 , @Value则需要每个字段都添加

  3. 松散绑定:这个什么意思呢? 比如我的yml中写的last-name,这个和lastName是一样的, - 后面跟着的字母默认是大写的。这就是松散绑定。可以测试一下

  4. JSR303数据校验 , 这个就是我们可以在字段是增加一层过滤器验证 , 可以保证数据的合法性

  5. 复杂类型封装,yml中可以封装对象 , 使用value就不支持

6.结论:

  1. 配置yml和配置properties都可以获取到值 , 强烈推荐 yml

  2. 如果我们在某个业务中,只需要获取配置文件中的某个值,可以使用一下 @value

  3. 如果说,我们专门编写了一个JavaBean来和配置文件进行一一映射,就直接@configurationProperties,不要犹豫!

7.JSR303数据校验

  1. Springboot中可以用@validated来校验数据,如果数据异常则会统一抛出异常,方便异常中心统一处理。
    @Component //注册bean
    @ConfigurationProperties(prefix = "person")
    @Validated  //数据校验
    public class Person {
    
        @Email(message="邮箱格式错误") //name必须是邮箱格式
        private String name;
    }
    

8.JSR303数据校验常用参数

@NotNull(message="名字不能为空")
private String userName;
@Max(value=120,message="年龄最大不能查过120")
private int age;
@Email(message="邮箱格式错误")
private String email;

空检查
@Null       验证对象是否为null
@NotNull    验证对象是否不为null, 无法查检长度为0的字符串
@NotBlank   检查约束字符串是不是Null还有被Trim的长度是否大于0,只对字符串,且会去掉前后空格.
@NotEmpty   检查约束元素是否为NULL或者是EMPTY.
    
Booelan检查
@AssertTrue     验证 Boolean 对象是否为 true  
@AssertFalse    验证 Boolean 对象是否为 false  
    
长度检查
@Size(min=, max=) 验证对象(Array,Collection,Map,String)长度是否在给定的范围之内  
@Length(min=, max=) string is between min and max included.

日期检查
@Past       验证 Date 和 Calendar 对象是否在当前时间之前  
@Future     验证 Date 和 Calendar 对象是否在当前时间之后  
@Pattern    验证 String 对象是否符合正则表达式的规则

.......等等
除此以外,我们还可以自定义一些数据校验规则 

9.JSR303数据校验jar包,也是注解

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值