SpringBoot yaml语法与JRS303校验超详细讲解

 更新时间:2022年10月10日 10:29:09   作者:Decade0712  
YAML 是 “YAML Ain’t Markup Language”(YAML 不是一种标记语言)的递归缩写。在开发的这种语言时,YAML 的意思其实是:“Yet Another Markup Language”(仍是一种标记语言),本文给大家介绍的非常详细,需要的朋友可以参考下

基本要点

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置空,运行测试代码,也不会出现报错

到此这篇关于SpringBoot yaml语法与JRS303校验超详细讲解的文章就介绍到这了,更多相关SpringBoot yaml语法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java算法真题详解运用单调栈

    Java算法真题详解运用单调栈

    一般使用单调栈无非两个方向,单调递减,单调递增。单调递增栈:存进去的数据都是增加的,碰到减少的时候,这时就要进行操作了。单调递减栈:存进去的数据都是减少的,碰到增加的时候,这时就要进行操作了,下面我们在真题中运用它
    2022-07-07
  • Java字符串详解的实例介绍

    Java字符串详解的实例介绍

    本篇文章介绍了,在Java中关于字符串详解一些实例操作,需要的朋友参考下
    2013-04-04
  • Java如何获取真实请求IP

    Java如何获取真实请求IP

    这篇文章主要介绍了Java如何获取真实请求IP问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08
  • Java Socket聊天室编程(二)之利用socket实现单聊聊天室

    Java Socket聊天室编程(二)之利用socket实现单聊聊天室

    这篇文章主要介绍了Java Socket聊天室编程(二)之利用socket实现单聊聊天室的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2016-09-09
  • java根据网络地址保存图片的方法

    java根据网络地址保存图片的方法

    这篇文章主要为大家详细介绍了java根据网络地址保存图片的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-07-07
  • Mybatis结果集自动映射的实例代码

    Mybatis结果集自动映射的实例代码

    在使用Mybatis时,有的时候我们可以不用定义resultMap,而是直接在<select>语句上指定resultType。这个时候其实就用到了Mybatis的结果集自动映射,下面通过本文给大家分享Mybatis结果集自动映射的实例代码,一起看看吧
    2017-02-02
  • SpringBoot向resources下写文件的两种方式

    SpringBoot向resources下写文件的两种方式

    这篇文章给大家分享了两种SpringBoot向resources下写文件的方式,每种方式都有详细的代码示例,对我们的学习或工作有一定的帮助,需要的朋友可以参考下
    2023-08-08
  • Springboot项目快速实现Aop功能

    Springboot项目快速实现Aop功能

    这篇文章主要介绍了Springboot项目如何快速实现Aop功能,对此方面感兴趣的小伙伴可以详细参考阅读本文,本文有一定的参考价值
    2023-03-03
  • spring boot启动时加载外部配置文件的方法

    spring boot启动时加载外部配置文件的方法

    这篇文章主要给大家介绍了关于spring boot启动时加载外部配置文件的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2018-02-02
  • java中throws与try...catch的区别点

    java中throws与try...catch的区别点

    在本篇文章里小编给大家整理了一篇关于java中throws与try...catch的区别点的内容,需要的朋友们跟着学习下。
    2020-02-02

最新评论