Springboot-----JSR校验(通俗易懂)
JSR306校验及配置文件环境
5.1、使用例子
在Person类name属性加上@Email校验,当输入不是合法的电子邮件时报错!!!
@Component //注册bean
@ConfigurationProperties(prefix = "person")
@Validated //数据校验
public class Person {
@Email(message="不是一个合法的邮箱地址!!!") //name必须是邮箱的格式
private String name;
}
报错详情:
当yaml文件中的name不是电子邮箱格式时候报错!!!
5.2、常用校验注释
空检查
@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 对象是否符合正则表达式的规则
数值检查,建议使用在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=) 检查数字是否介于min和max之间.
@Range(min=10000,max=50000,message="range.bean.wage")
private BigDecimal wage;
@Valid 递归的对关联对象进行校验, 如果关联对象是个集合或者数组,那么对其中的元素进行递归校验,如果是一个map,则对其中的值部分进行校验.(是否进行递归验证)
@CreditCardNumber信用卡验证
@Email 验证是否是邮件地址,如果为null,不进行验证,算通过验证。
@ScriptAssert(lang= ,script=, alias=)
@URL(protocol=,host=, port=,regexp=, flags=)
下面我们练习演示一些注释:
实体类Person.java文件:
/*
@ConfigurationProperties作用:
将配置文件中配置的每一个属性的值,映射到这个组件中;
告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定
参数 prefix = “person” : 将配置文件中的person下面的所有属性一一对应
*/
@Component //注册bean
@ConfigurationProperties(prefix = "person")
@Validated
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Person {
@Email(message="邮箱格式错误!!!") //name必须是邮箱格式
private String name;
@Min(value = 18,message = "年龄不能小于18岁!!!最小为value=18。。")
private Integer age;
@Size(min = 1,max = 10,message = "id长度需要在1~10之间")
private String id;
@NotNull(message = "地址不能为空!!!")
private String address;
@AssertTrue
private Boolean learning;
@Digits(integer = 3,fraction = 2,message = "体重精度为:integer = 3,fraction = 2")
private float weigth;
}
报错示例:当输入id的长度格式(超过10位)不正确时,会报错提醒,如下图
application.yml文件
报错提醒:
其余注释一样,只要符合要求就不报错,程序正常运行输出结果
若application.yaml文件中赋值不符合要求就会报错
完全正确的yaml文件示例:
person:
name: "2644844007@qq.com"
age: 20
id: 1234561
address: "xian"
learning: true
weigth: 71.0
测试类:
@SpringBootTest
class SpringbootTests {
@Autowired
Person person;
@Test
void testt() {
System.out.println(person);
}
}
成功运行结果如下:
5.3、多环境优先级
5.3.1、优先级
springboot 启动会扫描以下位置的application.properties或者application.yml文件作为Spring boot的默认配置文件:
springboot 启动会扫描以下位置的application.properties或者application.yml文件作为Spring boot的默认配置文件:
优先级1:项目路径下的config文件夹配置文件
优先级2:项目路径下配置文件
优先级3:资源路径下的config文件夹配置文件
优先级4:资源路径下配置文件
官方文档示例:
5.3.2、多配制文件:
文件命名格式:application-{profile}.properties/yml profile相当于各自的配置文件端口号
举例当有三个文件时:
- application-1.properties/yaml
- application-2.properties/yaml
- application-3.properties/yaml
springboot怎样去选择呢?
他不会自己去找对应文件,我们需要在主配置文件application.properties中进行选择其相应profile端口号
格式:
spring.profiles.active={profile}
主配置文件如下:
#比如在配置文件中指定使用1环境,我们可以通过设置不同的端口号进行测试;
#我们启动SpringBoot,就可以看到已经切换到1下的配置了;
spring.profiles.active=1
5.2.3、yaml多文件配置
yaml可以不用去写多个配置文件,在同一个配置文件中编写:
比如以设置端口号为例,
application.yaml文件:其中有两个端口号,以选择配置2为例。
server:
port: 8081
#active属性值:要激活环境块名称
spring:
profiles:
active: 1
---
server:
port: 8083
spring:
profiles: 1 #配置环境1的名称
---
server:
port: 8084
spring:
profiles: 2 #配置环境2的名称
···
注意:当yml和properties同时都配置了端口,并且没有激活其他环境 , 默认会使用properties配置文件的环境!