【SpringBoot】yaml语法讲解和JRS303校验

基本要点

1、properties和yaml文件

properties文件中的配置只支持键值对的形式,例如
server.port = 8081

yaml文件可以支持键值对、对象、数组(对空格的要求极其严格)

name: decade

#对象
student:
    name: decade
    age: 21

#对象的行内写法
student: {name: decade,age: 21} 
    
#数组
pets:
    - cat
    - dog
    - pig
pets: [cat,dog,pig]

2、给属性赋值的几种方式

1)如果使用*.properties作为配置文件,给属性赋值可以使用@Value

关键注解:@PropertySource+@Value
@PropertySource注解的value需要填关联配置文件的路径

注意:如果配置文件是application.properties,下面@ConfigurationProperties+@Component的注解也可以获取配置文件中的配置项

首先我们需要将idea中配置文件的编码格式改为utf8
在这里插入图片描述
然后我们定义一个实体类,使用EL表达式引用配置文件中的配置项

package com.decade.pojo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;

@Data
@AllArgsConstructor
@NoArgsConstructor
@Component
@PropertySource("classpath:application.properties")
public class Dog {
    @Value("${dog.name}")
    private String name;
}
2)使用yaml文件给属性赋值
  • @Component:将类注册成容器中的组件(使用configurationProperties的前提)

  • @ConfigurationProperties:注解可以将类中的属性和配置文件中的进行绑定
    该注解的属性prefix表示要在yaml文件中寻找以改属性值为开头的配置项进行绑定,例如@ConfigurationProperties(prefix = “people”)

  • 松散绑定:yaml文件中的属性可以是下划线连接,实体类中可以是驼峰命名
    例如yaml中是last_name,实体类中是lastName

package com.decade.pojo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

import java.util.Date;
import java.util.List;
import java.util.Map;

@Data
@AllArgsConstructor
@NoArgsConstructor
@Component
@ConfigurationProperties(prefix = "people")
public class People {

    private String name;
    private Integer age;
    private Boolean isHappy;
    private Date birth;
    private Map<String, Object> maps;
    private List<Object> list;
    private Dog dog;
}

如果添加注解爆红,那么需要在pom文件中添加一下下面这个依赖
这个依赖可以将我们的实体类与yaml文件关联起来,这样我们在yaml文件中进行配置配置项时,可以自动联想实体类中的属性

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

下面是2种方式的配置文件
在这里插入图片描述

最后我们写一个测试类测试一下两种方式是否导入成功

package com.decade;

import com.decade.pojo.Dog;
import com.decade.pojo.People;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
class SpringbootStudyApplicationTests {
    @Autowired
    private People people;

    @Autowired
    private Dog dog;

    @Test
    void contextLoads() {
        System.out.println(people);
        System.out.println("========================");
        System.out.println(dog);
    }

}

运行结果如下,验证通过
在这里插入图片描述

3、JRS303校验

在日常开发中,我们经常会遇到需要对数据进行校验的场景,例如非空校验和格式校验
这个时候,JRS303校验就能派上用场,如果数据不满足标准,则会统一抛出异常,方便异常中心统一处理

首先,我们需要导入相关依赖

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-validation</artifactId>
</dependency>

接着,我们在需要校验的属性所属的类上使用@Validated注解
在校验的字段上添加相关注解,常用注解如下

@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=) Validates that the annotated string is between min and max included.
日期检查 
@Past 验证 Date 和 Calendar 对象是否在当前时间之前,验证成立的话被注释的元素一定是一个过去的日期 
@Future 验证 Date 和 Calendar 对象是否在当前时间之后 ,验证成立的话被注释的元素一定是一个将来的日期 
@Pattern 验证 String 对象是否符合正则表达式的规则,被注释的元素符合制定的正则表达式,regexp:正则表达式 flags: 指定 Pattern.Flag 的数组,表示正则表达式的相关选项。
数值检查 
建议使用在Stirng,Integer类型,不建议使用在int类型上,因为表单值为“”时无法转换为int,但可以转换为Stirng为”“,Integer为null 
@Min 验证 Number 和 String 对象是否大等于指定的值 
@Max 验证 Number 和 String 对象是否小等于指定的值 
@DecimalMax 被标注的值必须不大于约束中指定的最大值. 这个约束的参数是一个通过BigDecimal定义的最大值的字符串表示.小数存在精度 
@DecimalMin 被标注的值必须不小于约束中指定的最小值. 这个约束的参数是一个通过BigDecimal定义的最小值的字符串表示.小数存在精度 
@Digits 验证 Number 和 String 的构成是否合法 
@Digits(integer=,fraction=) 验证字符串是否是符合指定格式的数字,interger指定整数精度,fraction指定小数精度。 
@Range(min=, max=) 被指定的元素必须在合适的范围内 
@Range(min=10000,max=50000,message=”range.bean.wage”) 
@Valid 递归的对关联对象进行校验, 如果关联对象是个集合或者数组,那么对其中的元素进行递归校验,如果是一个map,则对其中的值部分进行校验.(是否进行递归验证) 
@CreditCardNumber信用卡验证 
@Email 验证是否是邮件地址,如果为null,不进行验证,算通过验证。 
@ScriptAssert(lang= ,script=, alias=) 
@URL(protocol=,host=, port=,regexp=, flags=)

我们限制People的name属性不可为空并且在message属性中自定义错误信息
然后在配置文件中将该值设置为空,运行测试类提示如下
在这里插入图片描述

注意:
JRS303只可用于@ConfigurationProperties修饰的类
对于@PropertySource+@Value修饰的属性不生效

如图所示,我们把dog.name置空,运行测试代码,也不会出现报错

在这里插入图片描述
如有错误,欢迎指正!!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值