关于SpringBoot的@ConfigurationProperties注解和松散绑定、数据校验

 更新时间:2023年05月12日 11:29:25   作者:Java笔记虾  
这篇文章主要介绍了关于SpringBoot的@ConfigurationProperties注解和松散绑定、数据校验,@ConfigurationProperties主要作用就是将prefix属性指定的前缀配置项的值绑定到这个JavaBean上 ,通过指定的前缀,来绑定配置文件中的配置,需要的朋友可以参考下

@ConfigurationProperties

源码分析

@ConfigurationProperties主要作用就是将prefix属性指定的前缀配置项的值绑定到这个JavaBean上 ,通过指定的前缀,来绑定配置文件中的配置,通过如下源码可以看出, 如果你想绑定和验证一些外部属性,可以将它添加到类定义或@Configuration类中的@Bean方法上。

7da7d0d31ad38c784dd075d0b603cb8a.jpg

标注在类上

@Data   //使用该注解需要导入Lombok依赖
@Component
@ConfigurationProperties(prefix = "userinfo")
public class UserInfo {
    private String userId;
    private String name;
}

application.yml文件配置内容

userInfo:
  userId: 1001
  name: lucy

接下来通过控制器方法来返回这个对象,查看数据是否绑定

@RestController
public class HelloController {
    @Autowired
    private UserInfo userInfo;
    @GetMapping("/user")
    public UserInfo getUserInfo(){
        return userInfo;
    }
}

cc5710581bf9ec2df57a9ad4ff92b399.jpg

标注在方法上

上面源码中说到可以将它添加到@Configuration类中的@Bean方法上,所以下面来看看标注在方法上是如何使用的!

比如我们用到druid数据源的操作,这个数据源是属于第三方的,所以我们不能操作源码,不能再源码里面找到它的对象来给他添加注解,但我们可以在yml文件中给他配置,来拿到它的属性。

首先添加所需的依赖

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-starter</artifactId>
    <version>1.2.11</version>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
</dependency>

接着在yml文件中配置数据源

spring:
  datasource:
    druid:
      driver-class-name: com.mysql.jdbc.Driver
      url: jdbc:mysql://localhost:3306/test?serverTimezone=UTC
      username: root
      password: root

创建一个配置类,然后在类方法上添加注解,并通过prefix绑定数据

@SpringBootConfiguration
public class DatasourceConfig {
    @Bean
    @ConfigurationProperties(prefix = "spring.database.druid")
    public DataSource database(){
        return new DruidDataSource();
    }
}

通过控制器方法来检验绑定效果

@RestController
public class HelloController {
    @Autowired
    private DataSource dataSource;
    @GetMapping("/datasource")
    public void getDataSource(){
        System.out.println(dataSource);
    }
}

访问//localhost/datasource,查看控制台输出!!!

9341b6ef6b34654a409363627fb1bf96.jpg

松散绑定

我们在使用 @ConfigurationProperties注解的时候,@ConfigurationProperties(prefix = “userinfo”),这里给prefix的属性值与yml文件中的属性名称不一致,但是依旧绑定成功了!原因是什么呢?

这就需要提到Spring的松散绑定属性规则。因此使用以下方式书写都能与类的属性名称匹配。

userInfo:
  userId: 1001 # 驼峰命名方式
  #user_id: 1002 #下划线方式
  #user-id: 1003 #烤肉串方式
  #USER_ID: 1004 # 常量方式
  name: lucycd

需要注意的是,prefix的属性值必须全部为小写,就像下图所示,就会报错:前缀必须是规范形式。

7f7e06d63d00ee6236b83733a142d102.jpg

运行程序,也会在控制台提示你:配置属性名称“userInfo”无效;无效字符:“I”

0b108ee9daa67a61f1e6ea76d2325384.jpg

数据校验

Spring Boot中有很多配置文件,配置文件中我们可以自定义一些对应的属性值。那么这些属性值是否合法呢?我们如何来校验?在Java中有一种JSR303规范,我们可以针对一些对应的数值来进行校验。按照规范来进行书写,如果不符合要求就说明校验失败,反之,则成功!

SpringBoot也给出了强大的数据校验功能,可以有效的避免此类问题的发生。在JAVA EE的JSR303规范中给出了具体的数据校验标准,开发者可以根据自己的需要选择对应的校验框架,此处使用Hibernate提供的校验框架来作为实现进行数据校验。

导入验证包和校验实现包

<dependency>
    <groupId>javax.validation</groupId>
    <artifactId>validation-api</artifactId>
</dependency>
<dependency>
    <groupId>org.hibernate.validator</groupId>
    <artifactId>hibernate-validator</artifactId>
</dependency>

添加注解@Validated

给属性添加验证规则

@Data
@Component
@ConfigurationProperties(prefix = "userinfo")
@Validated
public class UserInfo {
   @Max(value = 1000,message = "userid超出范围了!")
   @Min(value = 0,message = "userid不能小于0!")
   private String userId;
   @Size(min = 2,max = 5,message = "name长度应该在2-5之间")
   private String name;
}

这里我们先输入不符合规范的数据,来验证数据是否能够校验成功

userInfo:
  userId: 1001
  name: lucycd

编写一个控制器方法来检验

@RestController
public class HelloController {
    @Autowired
    private UserInfo userInfo;
    @GetMapping("/user")
    public UserInfo getUserInfo(){
        return userInfo;
    }
}

运行程序,查看控制台,校验成功!!!

d5e87ab790d2ba511cdf8834919d6419.jpg

同样,将数据修改为符合规则的数据,程序就可以成功运行了!!!

当然,这里的校验规则还有许多,@NotNull@NotEmpty@Email等等,可以根据实际情况选择合适的注解。

1e6daa080e31ba54174d354bd095abf2.jpg

到此这篇关于关于SpringBoot的@ConfigurationProperties注解和松散绑定、数据校验的文章就介绍到这了,更多相关SpringBoot的@ConfigurationProperties注解内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Springboot整合Gson报错问题解决过程

    Springboot整合Gson报错问题解决过程

    这篇文章主要介绍了Springboot整合Gson报错问题解决过程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-06-06
  • 详解Java编程中向量(Vector)的应用

    详解Java编程中向量(Vector)的应用

    这篇文章主要介绍了Java中的向量(Vector)的应用,Vector也是Java中比较常用的一个类,需要的朋友可以参考下
    2015-10-10
  • Java的CyclicBarrier循环屏障解析

    Java的CyclicBarrier循环屏障解析

    这篇文章主要介绍了Java的CyclicBarrier循环屏障解析,CyclicBarrier和CountDownLatch一样,是一个同步工具类,它允许一组线程相互等待直到达到某个common barrier point,在程序中CyclicBarrier是非常有用的,它适用于一组线程必须互相等待的情况,需要的朋友可以参考下
    2023-12-12
  • Opencv实现身份证OCR识别的示例详解

    Opencv实现身份证OCR识别的示例详解

    这篇文章主要为大家详细介绍了如何使用Opencv实现身份证OCR识别功能,文中的示例代码讲解详细,具有一定的学习价值,感兴趣的小伙伴可以跟随小编一起了解一下
    2024-03-03
  • idea将项目上传到Gitee的图文过程

    idea将项目上传到Gitee的图文过程

    这篇文章主要介绍了idea将项目上传到Gitee上,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-08-08
  • Java实现统计在线人数功能的方法详解

    Java实现统计在线人数功能的方法详解

    很多人在笔试或者面试中问到:现在要你实现一个统计在线人数的功能,你该怎么设计?不知道的朋友,这篇文章就来告诉你具体实现方法
    2022-08-08
  • MyBatis使用annonation定义类型映射的简易用法示例

    MyBatis使用annonation定义类型映射的简易用法示例

    这篇文章主要介绍了MyBatis使用annonation定义类型映射的简易用法示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-09-09
  • 如何用java生成指定范围的随机数

    如何用java生成指定范围的随机数

    以生成[10,20]随机数为例,首先生成0-20的随机数,然后对(20-10+1)取模得到[0-10]之间的随机数,然后加上min=10,最后生成的是10-20的随机数
    2013-09-09
  • Java Web开发环境配置详解

    Java Web开发环境配置详解

    这篇文章主要介绍了Java Web开发环境配置详解,对初学者是个必备的过程,有需要的可以了解一下
    2016-11-11
  • java中for循环执行的顺序图文详析

    java中for循环执行的顺序图文详析

    关于java的for循环想必大家非常熟悉,它是java常用的语句之一,这篇文章主要给大家介绍了关于java中for循环执行顺序的相关资料,需要的朋友可以参考下
    2021-06-06

最新评论