Java 如何获取 @ApiModelProperty(value = “序列号“, name = “uuid“) 注解中的 value 值 name 值?
👨🎓作者:bug 菌
✏️博客:CSDN、掘金、infoQ、51CTO 等
🎉简介:CSDN 博客专家,C 站历届博客之星 Top50,掘金/InfoQ/51CTO 等社区优质创作者,全网粉丝合计 10w+,对一切技术感兴趣,重心偏 Java 方向;硬核公众号「 猿圈奇妙屋」,欢迎小伙伴们的加入,一起秃头,一起变强。
..
✍️温馨提醒:本文字数:1999 字, 阅读完需:约 5 分钟
如果小伙伴们在批阅文章的过程中觉得文章对自己有帮助,请别吝啬手中的赞呀,大胆的把文章点亮👍,相信你点赞了好的文章,平台也会经常给你推荐高质量好文,您的点赞三连(收藏+关注+留言)就是对 bug 菌写文道路上最好的鼓励与支持😘。时光不弃🏃🏻♀️,创作不停💕,加油☘️
一、前言🔥
环境说明:Windows10 + Idea2021.3.2 + Jdk1.8 + SpringBoot 2.3.1.RELEASE
近日 bug 菌在奋力赶项目,都是日常的接口逻辑实现,论复杂与否,也就论自己是否理解了业务,理解了其实写起来就顺。
但是论前端有个不想接的活儿,她不想写死表列名,原本返回给她的数据结构是一个对象,key 自然是字段名,value 为具体的值,比如{"id":"1","name":"张三"},然后需求是要展示一张中文列名的表格,但是给后端而言,这无非是在增加工作量,我本来数据直接从数据库查询而来,这样,我还得替他插入中文注释。
于是,活从天上来,谁让我是男生呢,那我就想办法给她实现一下吧,照顾一下女孩子,我仔细一下,我是采用对象来接收的,swagger 能将对于的字段名 展示中文注释,于是,我的灵感从这里而来。
需求就是要将字段名对于的中文注释一并返回,比如返回格式:
需求前可得知:
{ "id":"1", "name":"张三", "age":18 }
需求后:
{ "value":"1", "name":"序号" }, { "value":"张三", "name":"姓名" }, { "value":18, "name":"年龄" }
如果这个需求给你,你是否能有好的建议或者办法快速实现?
二、正文🔥
这里我是想到了一点,大家请看,我们为了给 swagger 接口文档方便调用时能更直观看到每个字段代表啥,会添加 @ApiModelProperty 注解,给 value 属性添加中文注释。
所以,我们要实现这个需求,那我们便可以从这里出发,我们先获取数据,由于获取到的是一个对象,那我们便将对象通过强转成 map 集合,具体结构展示如下:
可以通过这种方法快速将对象转成 map:
然后我们就还需要做一件事,将 key 所对应的中文注释也一定转成 map 的形式,这样我们就可以通过 key 对比,来一一获取对应的中文注释了。
所以重点来了,怎么获取将字段名跟对应的中文注释获取到呢,比如如下格式:
我们就想到了,可以通过 java 反射,获取该类 BaseEntity 上的 @ApiModelProperty 注解的所有属性!这样我们再通过 map 给存放起来返回,这样不就获取到了!Good idea!我们来实现一下
三、代码实现🔥
接下来,我来展示下我的实现方式,仅供参考,如果有更好的方式实现,那么请一定要告诉 bug 菌,一起学习一起进步。
获取获取指定类,你也可以这样写:但是这样就不是很灵活了,这种指定类写法。
其中,我来解释一下:我们通过遍历拿到 field 对象,我们可以对其进行属性获取,就这样写:field.getAnnotation(ApiModelProperty.class),然后再点,就可以拿到该注解的所有属性了,比如获取 value,可以调用 value()方法等。
注释我写的很详细,其实这也是通过方法,我们也可以将该注解 @ApiModelProperty 换成其他的,都是一样的获取注解属性值,所以你们可以举一反三。比如我换成 @TableField 注解。
然后写法就直接改成这样即可。
最后,我们来写个 main 方法调用一下,测试一下,结果是否拿到了。
具体控制台打印请看如下:
是不是成功了?哈哈,非常流批哦~~~最后,我们只需要遍历这两个 map 即可,根据 key 找到另一个 map 中的中文注释,这不是超级简单,我就不一一实现了,你们可以试着自己实现一下。
... ...
ok,以上就是我这期的全部内容啦,如果还想学习更多,可以看看我的往期热文推荐哦,不积跬步,无以至千里; 不积小流,无以成江海,一口吃不成一个大胖子,加油!咱们下期拜拜~~
文末🔥
我是 bug 菌,一名想走👣出大山改变命运的程序猿。接下来的路还很长,都等待着我们去突破、去挑战。来吧,小伙伴们,我们一起加油!未来皆可期,fighting!
感谢认真读完我博客的铁子萌,在这里呢送给大家一句话,不管你是在职还是在读,绝对终身受用。
时刻警醒自己:
抱怨没有用,一切靠自己;
想要过更好的生活,那就要逼着自己变的更强,生活加油!!!
版权声明: 本文为 InfoQ 作者【bug菌】的原创文章。
原文链接:【http://xie.infoq.cn/article/2660aae716455449333fbe68f】。文章转载请联系作者。
评论