SpringBoot:yaml配置注入和JSR303数据校验
Posted 冷血~多好
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringBoot:yaml配置注入和JSR303数据校验相关的知识,希望对你有一定的参考价值。
YAML是 JSON 的超集,因此是一种用于指定分层配置数据的便捷格式。
传统xml配置:
<server>
<port>8081<port>
</server>
yaml配置:
server:
prot: 8080
-
说明:语法要求严格!
1、空格不能省略
2、以缩进来控制层级关系,只要是左边对齐的一列数据都是同一个层级的。
3、属性和值的大小写都是十分敏感的。
案例使用:
1.建立一个application.yaml文件
server:
port: 8081
#对空格要求十分高
# 普通的key-value
#注入到我们的配置类中
name: chenjinxian
#对象
student:
name: chenjinxian
age: 3
#行内写法
student2: {name: chenjinxian,age: 3}
#数组
pets:
- cat
- dog
- pig
pets2: [cat,dog,pig]
person:
# name: chenjinxian
name: ${random.uuid}
age: ${random.int}
happy: false
birth: 2021/6/7
maps: {k1: v1,k2: v2}
lists:
- code
- music
- girl
dog:
name: ${person.hello:hello}_旺财2
age: 3
2.建立两个实体类
Dog类
package com.chen.pojo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@AllArgsConstructor
@Data
@NoArgsConstructor
@Component
public class Dog {
@Value("旺财")
private String name;
@Value("3")
private Integer age;
}
Person类
package com.chen.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 = "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;
}
然后在pom.xml配置
<!--防止使用@ConfigurationProperties(prefix = "person")爆红-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<version>2.5.0</version>
</dependency>
最后在test包下进行测试
package com.chen;
import com.chen.pojo.Dog;
import com.chen.pojo.Person;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class Spring02ConfigApplicationTests {
@Autowired
Dog dog;
@Autowired
private Person person;
@Test
void contextLoads() {
System.out.println(dog);
System.out.println(person);
}
}
Springboot中可以用@validated来校验数据,如果数据异常则会统一抛出异常,方便异常中心统一处理。(JSR303数据校验)
- 使用
javax.validation
对其参数和/或返回值的约束进行注释。 - 具有此类注释方法的目标类需要使用
@Validated
类型级别的注释进行注释,以便在其方法中搜索内联约束注释。
写个注解让我们的name只能支持Email格式;
更改上边的Person类:
package com.chen.pojo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import org.springframework.validation.annotation.Validated;
import javax.validation.constraints.Email;
import java.util.Date;
import java.util.List;
import java.util.Map;
@Data
@AllArgsConstructor
@NoArgsConstructor
@Component
@ConfigurationProperties(prefix = "person")
@Validated//数据校验
public class Person {
@Email(message = "邮箱格式不正确")
private String name;
private String lastName;
private Integer age;
private Boolean happy;
private Date birth;
private Map<String,Object> maps;
private List<Object> lists;
private Dog dog;
}
pom.xml添加依赖:
<!--@Validated//数据校验-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
<version>2.5.0</version>
</dependency>
输出结果:
常见参数
@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 对象是否符合正则表达式的规则
.......等等
以上是关于SpringBoot:yaml配置注入和JSR303数据校验的主要内容,如果未能解决你的问题,请参考以下文章
3.springboot:springboot配置文件(配置文件YAML属性文件值注入<@Value@ConfigurationProperties@PropertySource,@Im(代码片
3springboot:springboot配置文件(配置文件YAML属性文件值注入<@Value@ConfigurationProperties@PropertySource,@Imp(代码片