网易首页 > 网易号 > 正文 申请入驻

SpringBoot常用注解@ConfigurationProperties、松散绑定、数据校验

0
分享至

@ConfigurationProperties
源码分析

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

标注在类上@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;
}
}

标注在方法上

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

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

首先添加所需的依赖


com.alibabagroupId>
druid-spring-boot-starterartifactId>
1.2.11version>
dependency>
mysqlgroupId>
mysql-connector-javaartifactId>
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);
}

}

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

松散绑定

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

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

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

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

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

数据校验

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

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

导入验证包和校验实现包。另外推荐公众号Java精选,回复java面试,获取面试资料,支持在线随时随地手提。


javax.validationgroupId>
validation-apiartifactId>
dependency>
org.hibernate.validatorgroupId>
hibernate-validatorartifactId>
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;
}

}

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

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

当然,这里的校验规则还有许多,@NotNull@NotEmpty@Email等等,可以根据实际情况选择合适的注解。Java进阶路线:https://www.yoodb.com/

作者:Binaire-沐辰 https://blog.csdn.net/weixin_52986315

公众号“Java精选”所发表内容注明来源的,版权归原出处所有(无法查证版权的或者未注明出处的均来自网络,系转载,转载的目的在于传递更多信息,版权属于原作者。如有侵权,请联系,笔者会第一时间删除处理!

最近有很多人问,有没有读者交流群!加入方式很简单,公众号Java精选,回复“加群”,即可入群!

(微信小程序):3000+道面试题,包含Java基础、并发、JVM、线程、MQ系列、Redis、Spring系列、Elasticsearch、Docker、K8s、Flink、Spark、架构设计等,在线随时刷题!

特别推荐:专注分享最前沿的技术与资讯,为弯道超车做好准备及各种开源项目与高效率软件的公众号,「大咖笔记」,专注挖掘好东西,非常值得大家关注。点击下方公众号卡片关注

文章有帮助的话,点在看,转发吧!

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
33岁抗癌博主“润哥”去世,确诊时妻子刚怀上二胎,家人发布讣告

33岁抗癌博主“润哥”去世,确诊时妻子刚怀上二胎,家人发布讣告

环球网资讯
2026-03-19 20:13:07
小米集团股价盘中跌超6%

小米集团股价盘中跌超6%

每日经济新闻
2026-03-20 10:13:10
国乒新消息:3月19日世乒赛名单出炉!樊振东待抉择,王励勤发威

国乒新消息:3月19日世乒赛名单出炉!樊振东待抉择,王励勤发威

削桐作琴
2026-03-20 13:46:50
不留退路!中东或断供,中亚大佬紧急来华,要将能源军工托付中国

不留退路!中东或断供,中亚大佬紧急来华,要将能源军工托付中国

最美的开始
2026-03-19 04:08:08
曝火箭部分成员后悔得到杜兰特:想念格林狄龙 队内气氛尴尬紧张

曝火箭部分成员后悔得到杜兰特:想念格林狄龙 队内气氛尴尬紧张

罗说NBA
2026-03-20 06:33:05
谢婷婷带混血儿子回香港,飞机上晒儿子正脸照,长相俊俏像极父亲

谢婷婷带混血儿子回香港,飞机上晒儿子正脸照,长相俊俏像极父亲

八斗小先生
2026-03-20 15:59:46
《我的山与海》30集大结局:郝倩倩成全刘柱,温良不是李娟的良配

《我的山与海》30集大结局:郝倩倩成全刘柱,温良不是李娟的良配

阿伧说事
2026-03-20 19:18:01
明十三陵被挖后,怪异之事接连不断的发生,至今都无法合理地解释

明十三陵被挖后,怪异之事接连不断的发生,至今都无法合理地解释

历史甄有趣
2026-03-19 16:55:08
上海一女子路遇警察盘查,突然调转车头加速逃离!经查:其四肢健全,未持有残疾证,已被拘留

上海一女子路遇警察盘查,突然调转车头加速逃离!经查:其四肢健全,未持有残疾证,已被拘留

环球网资讯
2026-03-20 21:10:09
台岛最新重磅消息:大陆罕见公开定性赖清德,郑丽文即将出发离台

台岛最新重磅消息:大陆罕见公开定性赖清德,郑丽文即将出发离台

蓝色海边
2026-03-20 15:10:53
男按摩师揭秘:很多女顾客需要的并不是按摩,更需要的是我!

男按摩师揭秘:很多女顾客需要的并不是按摩,更需要的是我!

千秋历史
2026-03-18 21:12:02
日本之耻冲上热搜!高市白宫会面特朗普日式英语被嘲,日网友:真不是学历造假么?

日本之耻冲上热搜!高市白宫会面特朗普日式英语被嘲,日网友:真不是学历造假么?

东京新青年
2026-03-20 18:03:12
镜报:若本菲卡解雇穆里尼奥,阿莫林或将成为本菲卡新帅

镜报:若本菲卡解雇穆里尼奥,阿莫林或将成为本菲卡新帅

懂球帝
2026-03-20 13:24:04
比亚迪拿下英伟达,炸翻全球!

比亚迪拿下英伟达,炸翻全球!

财经三分钟pro
2026-03-19 18:22:04
伊朗“圣城旅”指挥官:“抵抗轴心”将独立对美以开展行动

伊朗“圣城旅”指挥官:“抵抗轴心”将独立对美以开展行动

界面新闻
2026-03-20 22:40:16
“最美产妇”火了!10分钟顺产后妆容精致,老公一脸憔悴对比惨烈

“最美产妇”火了!10分钟顺产后妆容精致,老公一脸憔悴对比惨烈

菁妈育儿
2026-03-20 19:46:22
铁了心打垮中国?最大威胁现身!这次不是美国,普京却笑到了最后

铁了心打垮中国?最大威胁现身!这次不是美国,普京却笑到了最后

阿七说史
2026-03-13 15:56:51
豪门家族大洗牌!连生5胎女继承人上位,还干出一家“神仙公司”

豪门家族大洗牌!连生5胎女继承人上位,还干出一家“神仙公司”

金融八卦女
2026-03-19 13:42:42
四川省纪委监委:2人主动投案接受审查调查

四川省纪委监委:2人主动投案接受审查调查

金台资讯
2026-03-20 15:49:28
价格大跳水!许多浙江人爱吃,正大量上市→

价格大跳水!许多浙江人爱吃,正大量上市→

杭州之声
2026-03-20 18:49:35
2026-03-20 23:16:49
Java精选
Java精选
一场永远也演不完的戏
1778文章数 3859关注度
往期回顾 全部

科技要闻

新SU7只涨4千!雷军:真怕交车慢挨骂

头条要闻

高市和特朗普会谈午饭都没吃 称就敏感话题进行"沟通"

头条要闻

高市和特朗普会谈午饭都没吃 称就敏感话题进行"沟通"

体育要闻

6年前的一场悲剧,造就了“法国瓦尔迪”

娱乐要闻

总台首届电影盛典,“沈马”CP再合体

财经要闻

金融法草案向社会公开征求意见

汽车要闻

何小鹏坦白局:每月3亿的“慌”与通向L4的坚定

态度原创

健康
游戏
家居
教育
公开课

转头就晕的耳石症,能开车上班吗?

韩媒反复验货《红沙》最终给8.3分 点评一针见血!

家居要闻

时空交织 空间绮梦

教育要闻

著名教育家顾明远:我主张十年义务教育,小学五年、初中三年、高中两年

公开课

李玫瑾:为什么性格比能力更重要?

无障碍浏览 进入关怀版