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配置文件的环境!

posted @ 2022-03-13 21:03  lam要努力  阅读(511)  评论(0编辑  收藏  举报