Trouble Shooting

[Spring Boot] API Docs : Springdoc & Springfox-Swagger

꽁치_로그 2023. 4. 5. 21:00

인프런의 'Spring Boot를 이용한 RESTful Web Services 개발'의 강의 중  REST API Documentation을 위한 Swagger에서 버전 문제로 인한 이슈를 해결한 방법에 대해 얘기하고자 한다.

1. 문제 발생 🤬

강의에서는 Springfox Swagger를 사용한다.

porm.xml - Dependency
1
2
3
4
5
6
7
8
9
10
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>2.9.2</version>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>2.9.2</version>
        </dependency>
cs
SwaggerConfig Class
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
 
@Configuration
//@EnableSwagger2
@OpenAPIDefinition
public class SwaggerConfig {
 
    @Bean
    public Docket DocumentApi(){
        return new Docket(DocumentationType.SWAGGER_2);
    }
 
}
 
cs

위와 같은 설정에서 정상적으로 동작하지 않았고 찾아본 결과 Springfox Swagger는 Springboot 2.7.X 이하의 버전에서만 가능하다고 한다. (나는 Springboot 3.0.0을 사용하고 있었다.)

2. 문제 해결 😁

검색해보니 Springboot 3.x 버전부터는 Springfox Swagger가 아닌 Springdoc로 구현한다고 한다.

porm.xml - Dependency
1
2
3
4
5
6
7
8
9
10
11
        <dependency>
            <groupId>org.springdoc</groupId>
            <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
            <version>2.0.2</version>
        </dependency>
        <dependency>
            <groupId>org.springdoc</groupId>
            <artifactId>springdoc-openapi-ui</artifactId>
            <version>1.6.9</version>
        </dependency>
 
cs
SwaggerConfig Class
1
2
3
4
5
6
7
8
9
10
11
12
13
14
@Configuration
//@EnableSwagger2
@OpenAPIDefinition
public class SwaggerConfig {
 
    @Bean
    public OpenAPI api(){
        Info info = new Info().title("").version("v3").description("aaa");
 
        return new OpenAPI().components(new Components()).info(info);
    }
 
}
 
cs
http://localhost:8088/swagger-ui/index.html#/

http://localhost:8088/v3/api-docs

정상적으로 동작하는 것을 확인할 수 있다!

요약 👉 Springboot 2.7.x 이하는 Springfox Swagger를, Springboot 3.x부터는 Springdoc를 사용하자!

반응형