Springboot系列(三十八):如何获取@ApiModelProperty(value = “序列号“, name = “uuid“)中的value值name值?| 超级详细,建议收藏

Posted bug菌¹

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Springboot系列(三十八):如何获取@ApiModelProperty(value = “序列号“, name = “uuid“)中的value值name值?| 超级详细,建议收藏相关的知识,希望对你有一定的参考价值。

👨‍🎓作者:bug菌
✏️博客:CSDN掘金infoQ51CTO
🎉简介: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,以上就是我这期的全部内容啦,如果还想学习更多,你可以看看我的往期热文推荐哦,每天积累一个奇淫小知识,日积月累下去,你一定能成为令人敬仰的大佬的。好啦,咱们下期见~

四、往期推荐🔥

五、文末🔥

       如果还想要学习更多,小伙伴们可关注bug菌专门为大家创建的专栏《springboot零基础入门教学》,从无到有,从零到一!希望能帮助到更多小伙伴们。

       我是bug菌,一名想走👣出大山改变命运的程序猿。接下来的路还很长,都等待着我们去突破、去挑战。来吧,小伙伴们,我们一起加油!未来皆可期,fighting!

        最后送大家两句我很喜欢的话,与诸君共勉!


☘️做你想做的人,没有时间限制,只要愿意,什么时候都可以start。

🍀你能从现在开始改变,也可以一成不变,这件事,没有规矩可言,你可以活出最精彩的自己。


​​​​

💌如果文章对您有所帮助,就请留下您的吧!(#^.^#);

💝如果喜欢bug菌分享的文章,就请给bug菌点个关注吧!(๑′ᴗ‵๑)づ╭❤~;

💗如果对文章有任何疑问,还请文末留言或者加群吧;

💞鉴于个人经验有限,所有观点及技术研点,如有异议,请直接回复参与讨论(请勿发表攻击言论,谢谢);

💕版权声明:原创不易,转载请附上原文出处链接和本文声明,版权所有,盗版必究!!!谢谢。

以上是关于Springboot系列(三十八):如何获取@ApiModelProperty(value = “序列号“, name = “uuid“)中的value值name值?| 超级详细,建议收藏的主要内容,如果未能解决你的问题,请参考以下文章

tableau实战系列(三十八)-Tableau Server 端口耗竭的具体表象及如何避免端口耗竭

Springboot系列(三十三):Springboot如何手动连接库并获取指定表结构|超级详细,建议收藏

Springboot系列(三十三):Springboot如何手动连接库并获取指定表结构|超级详细,建议收藏

Qt系列文章之三十八(基于QWidget 创建和使用动态dll共享库)

Powershell管理系列(三十八)PowerShell操作之文件查找和操作

Powershell管理系列(三十八)PowerShell操作之文件查找和操作