日志获取swagger接口api信息

博主分享了在项目中创建日志框架后遇到的问题,需要让非开发者也能查看每个接口的调用情况。提出了两种方案:一是将所有接口信息存入数据库,但因工作量大而放弃;二是利用Swagger注解,在后置通知时获取接口注释并展示。文中给出了具体的代码实现,展示了如何获取`@Api`和`@ApiOperation`注解的信息。

使用场景: 最近给项目中写了一个日志框架,展现出调用信息之后,被要求非开发者也能看到每一个接口的调用情况,并且单独开一个页面在列表中展示.

思考: 单纯用日志框架记录日志的话用JoinPoint类取出相关的接口名等信息就可,但查询注释信息来展示的话之前还没有提取过,于是,想了两个方案:

        第一.把所有的接口名和注释全部存到新建的表中,通过获取接口名来映射 ---此方法工作量太大,要把每一个接口手动添加到数据库,所以直接pass

        第二.通过swagger注解的记录,在后置通知时调取接口的注释名,那就上代码吧.

        Map<String, Object> map = new HashMap<>();
        //获取api: 事件
        Api api = joinPoint.getTarget().getClass().getAnnotation(Api.class);
        if (Optional.ofNullable(api).isPresent()){
            if (api.tags()!=null && api.tags().length>0){
                for (String tag: api.tags()){log.info("===>>>api: "+tag);}
                map.put("api", StringUtils.join(api.tags(),","));
            }
        }else {map.put("api", null);}

        //获取apiOperation: 方法
        MethodSignature ms = (MethodSignature)joinPoint.getSignature();
        ApiOperation apiOperation  =                         ms.getMethod().getDeclaredAnnotation(ApiOperation.class);
        if (Optional.ofNullable(apiOperation).isPresent()){
            if (StringUtils.isNotBlank(apiOperation.value())){
                log.info("===>>>apiOperation: "+apiOperation.value());
                map.put("apiOperation",apiOperation.value());
            }
        }else {map.put("apiOperation",null);}

API

ApiOperation

以上接口上方注释,各位如有更好的方法,或者除swagger以外的方法欢迎留言讨论,互相学习!

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值