SpringBoot使用Gateway聚合Springdoc,Knife4j

本文介绍了如何在SpringBoot应用中使用Gateway聚合Springdoc和Knife4j,详细说明了如何配置以解决Nginx代理导致的接口文档访问问题。内容包括各个组件的依赖、配置以及实际效果展示,提供了具体代码地址。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SpringBoot使用Gateway聚合Springdoc,Knife4j

前言

同时支持springboot:3.0,springboot:2.0,使用gateway聚合springdoc,ui使用knife4j,解决由于nginx配置代理前缀导致的文档无法访问,不强依赖注册中心(nacos,zk,Eureka)

有帮助的话记得点个赞哟!!!

基础环境

将所有依赖集成好作为一个本地包供其他项目使用

  • jdk17
  • maven3.6+
  • springboot3.0+|springboot2.0+
  • springcloud:2022.0.1
  • springcloud-alibaba:1.8.1-2022.0.0-RC2
  • springdoc:2.0.2|springdoc:1.6.0+
  • knife4j:4.0.0

当使用springboot:3.0,请使用 springdoc:2.0.0+
当使用springboot:2.0,请使用 springdoc:1.6.0+(部分springdoc的包名替换即可)

工具包(framework-document)

依赖

<dependencies>
    <dependency>
        <groupId>org.springdoc</groupId>
        <artifactId>springdoc-openapi-starter-webmvc-api</artifactId>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.springdoc</groupId>
        <artifactId>springdoc-openapi-starter-webflux-api</artifactId>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-gateway</artifactId>
        <scope>provided</scope>
    </dependency>
</dependencies>

代码

文档信息properties
import com.github.mpcloud.framework.core.consts.Constant;
import org.springframework.boot.context.properties.ConfigurationProperties;

/**
 * The type Swagger properties.
 *
 * @author : Milo
 */
@ConfigurationProperties("springdoc.info")
public class DocumentInfoProperties {
   
    private static final String DEFAULT_OPEN_API_ROUTE_NAME = "open-api-route";
    private static final String DEFAULT_GATEWAY_API_ROUTE_NAME = "open-api-gateway-route";
    /**
     * 文档标题
     */
    private String title;
    /**
     * 文档描述
     */
    private String description;
    /**
     * 项目version
     */
    private String projectVersion;
    /**
     * 许可证
     */
    private String license;
    /**
     * 许可证URL
     */
    private String licenseUrl;
    /**
     * 项目负责人信息
     */
    private final Contact contact = new Contact();
    /**
     * gateway
     */
    private final Gateway gateway = new Gateway();

    public String getTitle() {
   
        return this.title;
    }

    public void setTitle(final String title) {
   
        this.title = title;
    }

    public String getDescription() {
   
        return this.description;
    }

    public void setDescription(final String description) {
   
        this.description = description;
    }

    public String getProjectVersion() {
   
        return this.projectVersion;
    }

    public void setProjectVersion(final String projectVersion) {
   
        this.projectVersion = projectVersion;
    }

    public String getLicense() {
   
        return this.license;
    }

    public void setLicense(final String license) {
   
        this.license = license;
    }

    public String getLicenseUrl() {
   
        return this.licenseUrl;
    }

    public void setLicenseUrl(final String licenseUrl) {
   
        this.licenseUrl = licenseUrl;
    }

    public Contact getContact() {
   
        return this.contact;
<think>好的,我需要帮助用户在Spring Boot项目中使用自定义JS替代Knife4j。首先,我得理解Knife4j的作用。Knife4j是基于Swagger的API文档工具,它自动生成接口文档。用户想用自定义JS替代,可能是为了更灵活地定制文档界面或功能。 用户的需求是替换Knife4j,所以需要先排除Knife4j的依赖,避免版本冲突。根据引用[1],Knife4j已经引入了Springfox,所以需要检查项目的pom.xml或build.gradle,移除相关的依赖项。 接下来,用户需要集成自定义的JS前端。这可能包括静态资源的处理和接口数据的获取。引用[3]提到Thymeleaf可以作为模板引擎,用来加载静态页面。所以可能需要将自定义的HTML和JS文件放在resources/static或templates目录下,通过Controller来渲染页面。 然后,需要确保Spring Boot能够提供Swagger的JSON数据。即使移除了Knife4j,Swagger的核心库如springfox.boot.starter可能还在,所以需要配置Swagger生成API文档的JSON端点,通常是/v2/api-docs。这样自定义JS可以通过Ajax请求这个端点获取数据,再渲染到页面上。 另外,可能需要处理跨域问题,如果JS前端和Spring Boot应用不在同一个域,需要在后端配置CORS。或者在Controller中添加@CrossOrigin注解。 还需要考虑安全性和权限控制,比如是否需要拦截对API文档的访问,可以通过Spring Security配置。 最后,用户可能需要一个示例代码结构,展示如何排除依赖、配置Swagger、创建Controller和静态资源。同时,相关问题可能涉及如何优化自定义文档、处理数据交互或整合其他模板引擎。 现在需要把这些步骤整理成清晰的指导,并确保引用相关知识点,比如引用[1]的依赖排除,引用[3]的静态资源处理。同时,注意使用正确的格式,比如代码块用反引号,数学公式用$...$等。</think>在Spring Boot项目中通过自定义JS替代Knife4j的实现可分为以下步骤: ### 一、移除Knife4j依赖 在`pom.xml`中排除Knife4j的依赖(注意版本冲突问题[^1]): ```xml <dependency> <groupId>com.github.xiaoymin</groupId> <artifactId>knife4j-spring-boot-starter</artifactId> <version>${knife4j.version}</version> <exclusions> <exclusion> <groupId>com.github.xiaoymin</groupId> <artifactId>knife4j-core</artifactId> </exclusion> </exclusions> </dependency> ``` ### 二、保留Swagger核心功能 确保`springfox-boot-starter`存在以生成API元数据: ```xml <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-boot-starter</artifactId> <version>3.0.0</version> </dependency> ``` 通过`@EnableSwagger2`注解激活Swagger配置类,生成`/v2/api-docs`接口。 ### 三、构建自定义前端 1. **静态资源部署** 在`resources/static`目录下创建`custom-doc`文件夹,包含: - `index.html`:文档容器页面 - `swagger-ui.js`:自定义渲染逻辑 - `style.css`:界面样式表 2. **数据交互实现** 通过AJAX调用Swagger的JSON接口: ```javascript fetch('/v2/api-docs') .then(response => response.json()) .then(data => renderAPIDoc(data)); ``` 3. **动态渲染示例** 使用Vue.js实现数据绑定: ```html <div id="app"> <div v-for="path in apiPaths"> <h3>{{ path.method }} {{ path.path }}</h3> <p>{{ path.description }}</p> </div> </div> ``` ### 四、配置访问路由 添加控制器映射静态资源: ```java @Controller public class DocController { @GetMapping("/apidoc") public String doc() { return "forward:/custom-doc/index.html"; } } ``` ### 五、扩展配置建议 - **安全控制**:通过`@PreAuthorize`实现权限校验 - **数据增强**:利用`SwaggerConfiguration`扩展字段 - **模板整合**:结合Thymeleaf实现动态变量注入[^3] $$ T(n) = O(n \log n) \quad \text{(理想情况下的时间复杂度)} $$
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值