手把手教你解決spring boot匯入swagger2版本衝突問題,劉老師教程式設計

luckyzthao發表於2024-07-05

手把手教你解決spring boot匯入swagger2版本衝突問題

本文僅為個人理解,歡迎大家批評指錯

首先Spring Boot 3 和 Swagger 2 不相容。在 Spring Boot 3 中,應該使用 Springdoc 或其他與 Spring Boot 3 相容的 API 文件工具來替代 Swagger 2。
Swagger 2 的依賴底層使用的是 javax 依賴包,而 Spring Boot 3 使用的是 Jakarta 依賴包。一般來說,可以將 Spring Boot 的版本降到 3.0.1 以下來解決這個問題,但如果想要使用 3.0.1 版本以上的 Spring Boot,啟動時就會出現報錯。

  1. 去pop.xml檢視你springframework的版本,如果你已經是Spring boot3了,像我這裡是當前的最新版3.3.1,那就改成2.7.2,改完之後點選右上角m形狀的重新整理按鈕
    alt text

  2. 改完之後使用了HttpServletRequest和HttpServletResponse的類應該都會報錯,也是因為我之前提到的Swagger 2 的依賴底層使用的是 javax 依賴包,而 Spring Boot 3 使用的是 Jakarta 依賴包。
    alt text

此時不用匯入這個依賴,加入了也沒用spring boot2也不用這個.

<dependency>
    <groupId>jakarta.servlet</groupId>
    <artifactId>jakarta.servlet-api</artifactId>
    <version>6.0.0</version>
    <scope>provided</scope>
</dependency>

來個錯誤演示,加了之後的效果
alt text

這是因為Swagger 2 的依賴底層使用的是 javax 依賴包
alt text

正確做法加入這兩個包替換原來的包就行了,很簡單

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
  1. 在新增Swagger依賴之前先執行一下,如果你沒報錯但是執行失敗,那就是java版本太高了,像我這裡就是21
    alt text
    alt text

  2. 剩下就簡單了,修改application.properties

因為Spring Boot 2.6.X後與Swagger有版本衝突問題,需要加入以下配置

spring.mvc.pathmatch.matching-strategy=ant_path_matcher
  1. 修改pop.xml
<!-- 新增swagger2相關功能-->
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger2</artifactId>
    <version>2.9.2</version>
</dependency>
<!-- 新增swagger-ui相關功能-->
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger-ui</artifactId>
    <version>2.9.2</version>
</dependency>
  1. 在config目錄下新建一個配置類
@Configuration  //告訴Spring容器這是一個配置類
@EnableSwagger2 //開啟Swagger的功能
public class SwaggerConfig {
    
    @Bean
    public Docket createRestApi(){
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .select()
                .apis(RequestHandlerSelectors.basePackage("com"))//com包下的所有AIP都交給Swagger2管理
                .paths(PathSelectors.any()).build();
    }

    /**
     * 這裡為API文件顯示的資訊
     */
    private ApiInfo apiInfo(){
        return new ApiInfoBuilder()
                .title("演示專案API")
                .description("學習Swagger2的演示專案")
                .version("1.0")
                .build();
    }

}

成功執行
alt text

  1. 最後一步輸入網址即可http://localhost:8080/swagger-ui.html

相關文章