使用场景: 最近给项目中写了一个日志框架,展现出调用信息之后,被要求非开发者也能看到每一个接口的调用情况,并且单独开一个页面在列表中展示.
思考: 单纯用日志框架记录日志的话用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以外的方法请留言,互相学习!
|