Springboot系列(三十八):如何获取@ApiModelProperty(value = “序列号“, name = “uuid“)中的value值name值?| 超级详细,建议收藏
Posted bug菌¹
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Springboot系列(三十八):如何获取@ApiModelProperty(value = “序列号“, name = “uuid“)中的value值name值?| 超级详细,建议收藏相关的知识,希望对你有一定的参考价值。
👨🎓作者:bug菌
✏️博客:CSDN、掘金、infoQ、51CTO等
🎉简介:CSDN、 掘金等社区优质创作者,全网合计7w粉+,对一切技术都感兴趣,重心偏Java方向,目前运营公众号「 猿圈奇妙屋」,欢迎小伙伴们的加入,一起秃头,一起变强。
..
✍️温馨提醒:本文字数:3999字, 阅读完需:约 9 分钟
嗨,家人们,我是bug菌呀,我又来啦。今天我们来聊点什么咧,OK,接着为大家更《springboot零基础入门教学》系列文章吧。希望能帮助更多的初学者们快速入门!
小伙伴们在批阅文章的过程中如果觉得文章对您有一丝丝帮助,还请别吝啬您手里的赞呀,大胆的把文章 点亮👍吧,您的点赞三连( 收藏⭐️+关注👨🎓+留言📃)就是对bug菌我创作道路上最好的鼓励与支持😘。时光不弃🏃🏻♀️,创作不停💕,加油☘️
一、前言🔥
近日bug菌在奋力赶项目,都是日常的接口逻辑实现,论复杂与否,也就论自己是否理解了业务,理解了其实写起来就顺。
但是论前端有个不想接的活儿,她不想写死表列名,原本返回给她的数据结构是一个对象,key自然是字段名,value为具体的值,比如"id":"1","name":"张三",然后需求是要展示一张中文列名的表格,但是给后端而言,这无非是在增加工作量,我本来数据直接从数据库查询而来,这样,我还得替他插入中文注释。
于是,活从天上来,谁让我是男生呢,那我就想办法给她实现一下吧,照顾一下女孩子,我仔细一下,我是采用对象来接收的,swagger能将对于的字段名 展示中文注释,于是,我的灵感从这里而来。
需求就是要将字段名对于的中文注释一并返回,比如返回格式:
需求前可得知:
"id":"1", "name":"张三", "age":18
需求后:
"value":"1", "name":"序号" , "value":"张三", "name":"姓名" , "value":18, "name":"年龄"
如果这个需求给你,你是否能有好的建议或者办法快速实现?
二、正文🔥
这里我是想到了一点,大家请看,我们为了给swagger接口文档方便调用时能更直观看到每个字段代表啥,会添加@ApiModelProperty注解,给value属性添加中文注释。
所以,我们要实现这个需求,那我们便可以从这里出发,我们先获取数据,由于获取到的是一个对象,那我们便将对象通过强转成map集合,具体结构展示如下:
"id":"1",
"name":"张三",
"age":18
可以通过这种方法快速将对象转成map:
BeanMap map = BeanMap.create(Object);
然后我们就还需要做一件事,将key所对应的中文注释也一定转成map的形式,这样我们就可以通过key对比,来一一获取对应的中文注释了。
所以重点来了,怎么获取将字段名跟对应的中文注释获取到呢,比如如下格式:
"create_time":"创建时间",
"creator":"创建人",
"update_time":"修改时间",
"updator":"修改人"
我们就想到了,可以通过java反射,获取该类BaseEntity上的@ApiModelProperty注解的所有属性!这样我们再通过map给存放起来返回,这样不就获取到了!Good idea!我们来实现一下
三、代码实现🔥
接下来,我来展示下我的实现方式,仅供参考,如果有更好的方式实现,那么请一定要告诉bug菌,一起学习一起进步。
/**
* 通过反射获取指定类@ApiModelProperty注解修饰的name值跟value值
*/
public static LinkedHashMap getApiModelProperty(String classPath)
//定义一个可顺序集合存放
LinkedHashMap res = new LinkedHashMap();
try
// 1.根据类路径获取类
Class<?> c = Class.forName(classPath);
// 2.获取类的属性
Field[] declaredFields = c.getDeclaredFields();
// 3.遍历属性,获取属性上ApiModelProperty的值,属性的名,存入res
if (declaredFields.length != 0)
for (Field field : declaredFields)
if (field.getAnnotation(ApiModelProperty.class) != null)
// 这存的key为注解的[name]类属性名,value为注解的[value]值
res.put(field.getName(), field.getAnnotation(ApiModelProperty.class).value());
return res;
catch (ClassNotFoundException e)
e.printStackTrace();
return null;
获取获取指定类,你也可以这样写:但是这样就不是很灵活了,这种指定类写法。
Class<BaseEntity> aClass = BaseEntity.class;
Field[] declaredFields = aClass.getDeclaredFields();
其中,我来解释一下:我们通过遍历拿到field对象,我们可以对其进行属性获取,就这样写:field.getAnnotation(ApiModelProperty.class),然后再点,就可以拿到该注解的所有属性了,比如获取value,可以调用value()方法等。
注释我写的很详细,其实这也是通过方法,我们也可以将该注解@ApiModelProperty换成其他的,都是一样的获取注解属性值,所以你们可以举一反三。比如我换成@TableField注解。
然后写法就直接改成这样即可。
最后,我们来写个main方法调用一下,测试一下,结果是否拿到了。
public static void main(String[] args)
LinkedHashMap apiModelProperty = AopUtils.getApiModelProperty("com.example.demo.entity.BaseEntity");
System.out.println(apiModelProperty);
具体控制台打印请看如下:
是不是成功了?哈哈,非常流批哦~~~最后,我们只需要遍历这两个map即可,根据key找到另一个map中的中文注释,这不是超级简单,我就不一一实现了,你们可以试着自己实现一下。
... ...
ok,以上就是我这期的全部内容啦,如果还想学习更多,你可以看看我的往期热文推荐哦,每天积累一个奇淫小知识,日积月累下去,你一定能成为令人敬仰的大佬的。好啦,咱们下期见~
四、往期推荐🔥
- springboot系列(一):如何创建springboot项目及启动
- springboot系列(三):多环境切换,实例演示
- springboot系列(四):stater入门
- springboot系列(五):史上最最最全springboot常用注解
- springboot系列(六):mysql配置及数据库查询
- springboot系列(七):如何通过mybatis-plus实现接口增删改查
- springboot系列(八):mybatis-plus之条件构造器使用手册
- springboot系列(九):mybatis-plus之如何自定义sql
- springboot系列(十):mybatis之xml映射文件>、<=等特殊符号写法
- springboot系列(十一):实现多数据源配置,开箱即用
- springboot系列(十二):如何实现邮件发送提醒,你一定得会(准备篇)
- springboot系列(十三):如何实现发送普通邮件?你一定得会
- springboot系列(十四):如何实现发送图片、doc文档等附件邮件?你一定得会
- springboot系列(十五):如何实现静态邮件模板发送?你一定得会
- springboot系列(十六):如何实现发送邮件提醒,附完整源码
- springboot系列(十七):集成在线接口文档Swagger2
- springboot系列(十八):如何Windows安装redis?你玩过么
- springboot系列(十九):如何集成redis?不会我教你
- springboot系列(二十):如何通过redis实现手机号验证码功能
- ... ...
五、文末🔥
如果还想要学习更多,小伙伴们可关注bug菌专门为大家创建的专栏《springboot零基础入门教学》,从无到有,从零到一!希望能帮助到更多小伙伴们。
我是bug菌,一名想走👣出大山改变命运的程序猿。接下来的路还很长,都等待着我们去突破、去挑战。来吧,小伙伴们,我们一起加油!未来皆可期,fighting!
最后送大家两句我很喜欢的话,与诸君共勉!
☘️做你想做的人,没有时间限制,只要愿意,什么时候都可以start。
🍀你能从现在开始改变,也可以一成不变,这件事,没有规矩可言,你可以活出最精彩的自己。
💌如果文章对您有所帮助,就请留下您的赞吧!(#^.^#);
💝如果喜欢bug菌分享的文章,就请给bug菌点个关注吧!(๑′ᴗ‵๑)づ╭❤~;
💗如果对文章有任何疑问,还请文末留言或者加群吧;
💞鉴于个人经验有限,所有观点及技术研点,如有异议,请直接回复参与讨论(请勿发表攻击言论,谢谢);
💕版权声明:原创不易,转载请附上原文出处链接和本文声明,版权所有,盗版必究!!!谢谢。
以上是关于Springboot系列(三十八):如何获取@ApiModelProperty(value = “序列号“, name = “uuid“)中的value值name值?| 超级详细,建议收藏的主要内容,如果未能解决你的问题,请参考以下文章
tableau实战系列(三十八)-Tableau Server 端口耗竭的具体表象及如何避免端口耗竭
Springboot系列(三十三):Springboot如何手动连接库并获取指定表结构|超级详细,建议收藏
Springboot系列(三十三):Springboot如何手动连接库并获取指定表结构|超级详细,建议收藏
Qt系列文章之三十八(基于QWidget 创建和使用动态dll共享库)