在這裡記錄一下在 Spring Cloud 裡的其中一個微服務中加入 Swagger 的過程

Directory
目標是要在 course_mysql 裡面加入 Swagger

# Step1:加入依賴

course_mysqlpom.xml 文件裡面加入 Swagger 的 dependency

<dependency>  
    <groupId>io.springfox</groupId>  
    <artifactId>springfox-swagger2</artifactId>  
    <version>2.9.2</version>  
    <!-- 版本3.0.0的會有bug, swagger-ui.html 刷新不出來-->
</dependency>  
<dependency>  
    <groupId>io.springfox</groupId>  
    <artifactId>springfox-swagger-ui</artifactId>  
    <version>2.9.2</version>  
   <!-- 版本3.0.0的會有bug, swagger-ui.html 刷新不出來-->
</dependency>

除了 Swagger 版本的問題,另一個可能會出 bug 的地方是 spring boot 的版本,在同一個 pom.xml 文件中,我把 sprint boot 的 version 降低到 2.6.8 ,最後才能運行 Swagger 成功(找 bug 找了個半天 T__T)

<parent>  
    <groupId>org.springframework.boot</groupId>  
    <artifactId>spring-boot-starter-parent</artifactId>  
    <version>2.6.8</version>  
    <relativePath/> <!-- lookup parent from repository -->  
</parent>

還有一個可能會發生的 error(忘了是哪個,當時沒記下來)
可以在 application.properties 加上

spring.mvc.pathmatch.matching-strategy = ANT_PATH_MATCHER

# Step 2: SwaggerConfig

我在 course_mysql 裡 的 一個 package config 裡面,新增一個 SwaggerConfig 的 class 專門配置 Swagger
基本上改一改 basePackagey 就行

// 首先一定要加上 @EnableSwagger2 
@Configuration  
@EnableSwagger2  
public class SwaggerConfig {  
    @Bean  
    public Docket createRestApi() {  
        return new Docket(DocumentationType.SWAGGER_2)  // DocumentationType.SWAGGER_2 固定的,代表 swagger2  
//                .groupName ("分布式任务系统") // 如果配置多个文档的时候,那么需要配置 groupName 来分组标识  
                .apiInfo(metaData()) // 用于生成 API 信息  
                .select() //select () 函数返回一个 ApiSelectorBuilder 实例,用来控制接口被 swagger 做成文档  
                .apis(RequestHandlerSelectors.basePackage("com.example.course_mysql")) // 用于指定扫描哪个包下的接口  
                .paths(PathSelectors.any())// 选择所有的 API, 如果你想只为部分 API 生成文档,可以配置这里  
                .build();  
    }  
  
    private ApiInfo metaData() {  
        return new ApiInfoBuilder()  
                .title("Course Service") //  可以用来自定义 API 的主标题  
                .description("this api allows you to find student, course, and enrollment info") // 可以用来描述整体的 API  
                .termsOfServiceUrl("") // 用于定义服务的域名  
                .version("1.0") // 可以用来定义版本。  
                .build(); //  
    }  
  
}

# Step 3 : localhost:8000/swagger-ui.html

只需要在 localhost:8000 後面加上 swagger-ui.html 就可以顯示了
(因為我是用 spring cloud, 所以不是 localhost:8000
然後就可以自己在 Swagger 試著做各種的請求囉~~

other resources
Spring Boot2.0 从青铜到王者 - IDEA、JPA、Mybatis、分布式事务、springboot_哔哩哔哩_bilibili

-End-