Spring Cloud Gateway网关下的文档聚合(knife4j)

在Spring Cloud Gateway网关下使用Knife4j进行文档聚合,你需要首先配置好Knife4j,并确保所有需要被文档化的服务都已经接入Knife4j。以下是一个简化的步骤和示例代码:

  1. 在每个服务中添加Knife4j依赖:



<dependency>
    <groupId>com.github.xiaoymin</groupId>
    <artifactId>knife4j-spring-boot-starter</artifactId>
    <version>最新版本</version>
</dependency>
  1. 在每个服务的application.ymlapplication.properties中配置Knife4j:



# 配置Knife4j
knife4j.enable=true
knife4j.basic=
  username: your-username
  password: your-password
  1. 在网关服务中,使用Knife4j提供的SwaggerResource类来获取各个服务的Swagger配置,并通过Spring Cloud Gateway的路由功能将这些配置暴露出来。

示例代码:




@Configuration
public class Knife4jConfig {
 
    @Autowired(required = false)
    private List<RouteLocator> routeLocators = new ArrayList<>();
 
    @Autowired
    private GatewayProperties gatewayProperties;
 
    @Bean
    public SwaggerResourcesProvider swaggerResourcesProvider() {
        return () -> {
            List<SwaggerResource> resources = new ArrayList<>();
            routeLocators.forEach(routeLocator -> routeLocator.getRoutes().forEach(route -> {
                // 假设服务名称和服务路径相同
                String serviceName = route.getId();
                resources.add(swaggerResource(serviceName, route.getUri().toString() + "/v2/api-docs"));
            }));
            return resources;
        };
    }
 
    private SwaggerResource swaggerResource(String name, String location) {
        SwaggerResource swaggerResource = new SwaggerResource();
        swaggerResource.setName(name);
        swaggerResource.setLocation(location);
        swaggerResource.setSwaggerVersion("2.0");
        return swaggerResource;
    }
}
  1. 在网关服务中创建一个Controller来响应Knife4j的文档请求:



@RestController
@RequestMapping("/swagger-resources")
public class SwaggerHandler {
    @Autowired
    private SwaggerResourcesProvider swaggerResourcesProvider;
 
    @GetMapping("/configuration/security")
    public ResponseEntity<SecurityConfiguration> securityConfiguration() {
        return ResponseEntity.ok(new SecurityConfiguration("basicAuth", new ArrayList<>()));
    }
 
    @GetMapping("/configuration/ui")
    public ResponseEntity<UiConfiguration> uiConfiguration() {
        return ResponseEntity.ok(new UiConfiguration(null, null, null, null, UiConfiguration.Constants.OPERATION_NONE, 1000L));
    }
 
    @GetMapping("/")
    public ResponseEntity<List<SwaggerResource>> swaggerResources() {
        retur
最后修改于:2024年08月29日 09:20

评论已关闭

推荐阅读

Vue中使用mind-map实现在线思维导图
2024年08月04日
VUE
Web前端最全Vue实现免密登录跳转的方式_vue怎么样不登录返回首页,最强技术实现
2024年08月04日
VUE
vue3 项目搭建教程(基于create-vue,vite,Vite + Vue)
2024年08月04日
VUE
Vue-颜色选择器实现方案——>Vue-Color( 实战*1+ Demo*7)
2024年08月04日
VUE
Vue项目卡顿慢加载?这些优化技巧告诉你!_vue数据多渲染卡顿
2024年08月04日
VUE
vue中的keep-alive详解与应用场景
2024年08月04日
VUE
Vue、React实现excel导出功能(三种实现方式保姆级讲解)
2024年08月04日
vue-office/docx插件实现docx文件预览
2024年08月04日
VUE
java调用js文件的两种方法(支持V8引擎)
2024年08月04日
JavaScript:解决计算精度问题/mathjs/bignumber.js/big.js/decimal.js
2024年08月04日
两周从爬虫小白变大神 _yjs_js_security_passport
2024年08月04日
JS笔记(对象、函数、数组)
2024年08月04日
Markdown.js:强大的纯JavaScript Markdown解析器
2024年08月04日
Vue项目:js模拟点击a标签下载文件并重命名,URL文件地址下载方法、请求接口下载文件方法总结。
2024年08月04日
vue 父组件怎么获取子组件里面的data数据
2024年08月04日
VUE
个人开发实现AI套壳网站快速搭建(Vue+elementUI+SpringBoot)
2024年08月04日
el-table 表格封装并改造实现单元格可编辑
2024年08月04日
none
nodejs环境下创建vue项目、SSH密钥登陆!!!
2024年08月04日
vue+quill+element-ui实现视频、图片上传及缩放保姆级教程,轻松使用富文本
2024年08月04日
【three.js】22. Imported Models导入模型
2024年08月04日