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

目录
  • 基本要点
    • 1、properties和yaml文件
    • 2、给属性赋值的几种方式
    • 3、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置空,运行测试代码,也不会出现报错

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

(0)

相关推荐

  • idea项目全局去掉严格的语法校验方式

    目录 idea项目全局去掉严格的语法校验 解决idea无法提示代码.不检查语法的方法 总结 idea项目全局去掉严格的语法校验 最近小编将开发工具由用了将近4年的Eclipse换到ItelliJ IDEA,在导入eclipse工作空间中的项目时,打开发现原来在eclipse中好好的文件在IDEA中出现了好多警告. 包括java文件.xml文件.sql等如下图: 虽然这都是一些友好的警告,但想通过如此严格的检测还是需要花费功夫的,那么如何去掉这些警告呢? 1.点击右下角的小人,将检测级别置为Syn

  • IntelliJ IDEA搜索整个项目进行全局替换(有危险慎用)

    我们用Eclipse或者IntelliJ IDEA编程,有时候需要将整个项目的某个字符串替换成其他的. 全局搜索我会,我还给调成ctrl+g了呢,但是遇到要全局(整个项目)替换字符串.哎哟,我有点蒙了.这不换了编辑器吗. 我用的是eclipse的keymap而且电脑又不是mac.那么问题来啦.怎么找快捷键呢. 如下: 额,顺便说下,mac的好像是ctrl+shift+r,就出来了.我还讨来了个mac截图. 本功能请谨慎使用! 总结 以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作

  • IntelliJ IDEA教程之clean或者install Maven项目的操作方法

    目录 IntelliJ IDEA教程之clean或者install Maven项目的操作方法 一.前言 二.步骤 附录:Maven工程中删除没用到的依赖包 前言 一.核心方法是exclusion去除包 二.使用步骤 IntelliJ IDEA教程之clean或者install Maven项目的操作方法 一.前言 Eclipse中如果我们想clean或者install工程,我们只需要右键工程,然后找到run->Maven install 或者run->Maven clean就可以了,但是IDEA

  • SpringBoot超详细讲解yaml配置文件

    目录 1.文件类型 A.properties配置文件类型 B.yaml 基本语法 数据类型 2.配置提示 1.文件类型 A.properties配置文件类型 同以前properties用法一样 B.yaml 简介: YAML 是 "YAML Ain't Markup Language"(YAML 不是一种标记语言)的递归缩写.在开发的这种语言时,YAML 的意思其实是:"Yet Another Markup Language"(仍是一种标记语言). 非常适合用来做以

  • 超详细讲解SpringBoot参数校验实例

    目录 使用传统方式的弊端 引入依赖 注解说明 一.对实体类进行校验 1.entity 2.controller 3.编写全局统一异常处理 二.针对单个参数进行校验 三.分组校验 1.entity 2.controller 四.自定义分组校验 1.entity 2.CustomSequenceProvider 3.controller 五.自定义校验 1.定义校验注解 2.实现注解 六.嵌套校验 七.快速失败 注意事项 总结 使用传统方式的弊端 public String addUser(User

  • SpringBoot整合Redis实现常用功能超详细过程

    目录 1 登陆功能 1.1 基于Session实现登录流程 1.1.1 session共享问题 1.2 Redis替代Session 1.2.1.设计key的结构 1.2.2.设计key的具体细节 1.2.3.整体访问流程 2 缓存功能 2.1 什么是缓存? 2.1.1 为什么要使用缓存 2.1.2 如何使用缓存 2.2.使用缓存 2.2.1 .缓存模型和思路 2.3 缓存更新策略 2.3.1 .数据库缓存不一致解决方案: 2.3.2 .数据库和缓存不一致采用什么方案 2.4 缓存穿透问题的解决

  • SpringBoot超详细讲解集成Flink的部署与打包方法

    目录 一.SpringBoot集成Flink 二.FlinkTask写法调整 三.打包插件 四.Flink的上传与运行 总结 一.SpringBoot集成Flink 其实没什么特别的,就把Flink依赖的包在pom引入就行了.只是FlinkTask的写法要小调整下,把相关依赖交给spring管理就行. 然后如果放弃Flink的Dashboard端监控task执行相关信息,那也可以在SpringBoot的启动类里调用就行,但是可能出现task的相关对象没有注入,这种都是小问题(实际就是spring

  • SpringBoot超详细讲解多数据源集成

    目录 一.多数据源使用场景与弊端 1.场景 2.弊端 二.使用步骤 1.引入库 2.多数据源配置文件 3.多数据源配置类 4.使用 总结 一.多数据源使用场景与弊端 1.场景 业务系统跨数据库 数据转存(这个现在太low了,应该高级点都不用) 系统集成 2.弊端 跨库业务事务问题 service.dao不能重复注入数据源 二.使用步骤 1.引入库 <!-- 多数据源支持 --> <dependency> <groupId>com.baomidou</groupId

  • SpringBoot超详细讲解自动配置原理

    目录 SpringBoot自动配置原理 SpringBoot特点 1.依赖管理 A.父项目做依赖管理 B.开发导入starter场景启动器 C.可以修改默认版本号 2.自动配置 A.自动配好Tomcat B.自动配好SpringMVC C.默认的包结构 D.各种配置拥有默认值 E.按需要加载所有自动配置项 SpringBoot自动配置原理 了解SpringBoot自动配置原理 1.SpringBoot特点 2.容器功能 3.自动配置原理入门 4.开发技巧 SpringBoot特点 1.依赖管理

  • SpringBoot超详细讲解Thymeleaf模板引擎

    Jsp是最早的模板技术,用来处理视图层的,用来做数据显示的模板 B S结构: B:浏览器:用来显示数据,发送请求,没有处理能力 发送一个请求,访问a.jsp,a.jsp在服务器端变成Servlet,在将输出的数据返回给浏览器,浏览器就可以看到结果数据,jsp最终翻译过来也是个html页面 模板技术你就可以把它们当成字符串的替换,比如说:这里{data}这里有一个字符串,你把它换成固定值其他值,但是这个替换有一些附加的功能,通过模板技术处理视图层的内容 第一个例子: pom.xml:Thymele

  • SpringBoot超详细讲解@Enable*注解和@Import

    目录 @Enable* 解决办法 解放方案一 解决方案二 解决方案三 @Import 1.导入Bean 2.导入配置类 3.导入ImportSelector实现类 4.导入ImportBeanDefinitionRegistrar实现类 @Enable* 创建一个主启动类 package com.you.boot; import com.you.config.EnableUser; import com.you.config.UserConfig; import org.springframew

  • SpringBoot yaml语法与数据读取操作详解

    目录 yaml yaml语法规则 字面值表示方式: 数组表示方式: 对象数组格式: 对象数组缩略格式: 读取yaml数据 编写yaml文件 读取单一数据 读取二级数据 读取数组数据 读取服务器端口号 读取对象属性 封装全部数据到Environment对象 读取yaml引用类型属性数据 application.yml MyDataSource 读取数据 变量的引用 application.yml 读取数据 context-path @Autowired报错解决方案 yaml YAML是一种数据序列

  • SpringBoot超详细讲解@Value注解

    目录 一.非配置文件注入 1.注入普通字符串 2.注入JAVA系统变量 3.注入表达式 4.注入其他Bean属性 5.注入文件资源 6.注入URL资源 二.通过配置文件注入 1.注入普通字符串 2.注入基本类型 3.注入数组类型 4.注入List类型 5.注入Map类型 一.非配置文件注入 1.注入普通字符串 直接附在属性名上,在 Bean 初始化时,会赋初始值. @Value("admin") private String name; 2.注入JAVA系统变量 @Value(&quo

随机推荐