NoBugBoy / YDoc

充分利用springboot自有注解来对文档进行描述的一款文档生成器。 让我们抛弃大量注解和配置一起拥抱简洁。
Apache License 2.0
82 stars 13 forks source link

获取不到controller注解信息 #9

Closed shuigedeng closed 2 years ago

shuigedeng commented 3 years ago
  1. 如果controller被cglib代理 那么获取不到controller注解信息

  2. ScanControllerSwagger scan() 方法 // 组装swagger-api Class<?> aClass = object.getValue().getClass(); // 如果有外层路径需要加上 String outPath = buildBaseUrl(aClass);

public String buildBaseUrl(Class<?> aClass) { String basePath = ""; if (aClass.isAnnotationPresent(RequestMapping.class)) { RequestMapping annotation = aClass.getAnnotation(RequestMapping.class); if (annotation.value().length > 0) { basePath = annotation.value()[0]; } } return basePath; } 如果controller被代理了 那么outPath永远为空字符串 还应该通过 aClass.getSuperClass().isAnnotationPresent(RequestMapping.class) 判断

  1. 建议添加一个配置项 配置controller路径 扫描这个路径下controller信息
NoBugBoy commented 3 years ago

不晓得你是怎么代理的controller, 我尝试用aop代理了一下似乎没有这样的问题

sheungxin commented 2 years ago

Class<?> aClass = object.getValue().getClass(); 改为 Class<?> aClass = ClassUtils.getUserClass(object.getValue().getClass());

loongs-zhang commented 2 years ago

随便写个AOP,拦截到controller的方法,就能复现这个问题。@NoBugBoy

NoBugBoy commented 2 years ago

1.1.5解决了这个问题