在 RuoYi 微服务框架中,
ruoyi-auth
模块的 API 文档可能不会显示在 Knife4j 中,这通常是因为默认配置过滤了ruoyi-auth
。以下提供的教程详细说明了如何一步步解决这一问题。
首先,在 ruoyi-auth
模块的 pom.xml
文件中添加对 Swagger 的依赖项。确保包含 ruoyi-common-swagger
,以便项目能够正确生成 API 文档。
在 pom.xml
文件中,添加如下内容:
<!-- RuoYi Common Swagger -->
<dependency>
<groupId>com.ruoyi</groupId>
<artifactId>ruoyi-common-swagger</artifactId>
</dependency>
在 ruoyi-auth
模块的启动类上添加 @EnableCustomSwagger2
注解,以确保该模块启用 Swagger 支持。这样能够在模块启动时自动加载 Swagger 配置。
@EnableCustomSwagger2
最后一步是修改 SwaggerProvider.java
文件的 get()
方法。在这个方法中,系统会根据配置过滤掉 ruoyi-auth
,导致 API 文档在 Knife4j 中不可见。为了解决此问题,可以注释掉将 ruoyi-auth
排除在外的过滤代码。
找到 .filter(predicateDefinition -> !"ruoyi-auth".equalsIgnoreCase(routeDefinition.getId()))
这一行,将其注释掉即可。完整代码示例如下:
@Override
public List<SwaggerResource> get()
{
List<SwaggerResource> resourceList = new ArrayList<>();
List<String> routes = new ArrayList<>();
// 获取网关中配置的 route
routeLocator.getRoutes().subscribe(route -> routes.add(route.getId()));
gatewayProperties.getRoutes().stream()
.filter(routeDefinition -> routes.contains(routeDefinition.getId()))
.forEach(routeDefinition -> routeDefinition.getPredicates().stream()
.filter(predicateDefinition -> "Path".equalsIgnoreCase(predicateDefinition.getName()))
// .filter(predicateDefinition -> !"ruoyi-auth".equalsIgnoreCase(routeDefinition.getId())) // 注释掉此行
.forEach(predicateDefinition -> resourceList
.add(swaggerResource(routeDefinition.getId(), predicateDefinition.getArgs()
.get(NameUtils.GENERATED_NAME_PREFIX + "0").replace("/**", SWAGGER2URL)))));
return resourceList;
}
通过上述代码修改,即可成功取消 ruoyi-auth
模块的过滤,使得该模块的 API 能够在 Knife4j 的文档中展示出来。
在 RuoYi 微服务项目中,通过增加 Swagger
依赖、启用 @EnableCustomSwagger2
注解以及调整 SwaggerProvider
配置,我们可以成功解决 ruoyi-auth
API 在 Knife4j 中不显示的问题。
powered by kaifamiao