JAVA/Spring Boot

[ Spring Boot ] - swagger 적용

algml0703 2023. 5. 15. 23:09
반응형

build.gradle에 아래의 두 가지 추가해줌

implementation 'io.springfox:springfox-swagger-ui:3.0.0'
implementation 'io.springfox:springfox-boot-starter:3.0.0'

SwaggerConfig 파일 추가해줌

package com.example.javafullcourse.swagger;


import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

@Configuration
@EnableSwagger2
public class SwaggerConfig {
    @Bean
    public Docket api() {
        return new Docket(DocumentationType.OAS_30)
                .useDefaultResponseMessages(true) 
                .apiInfo(apiInfo())
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.example.javafullcourse.swagger"))
                .paths(PathSelectors.any()) 
                .build();
    }

    public ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title("SpringBoot Rest API Documentation")
                .description("3rd UMC Server: BAEMIN Clone coding - ?조")
                .version("0.1")
                .build();
    }
}

api 파일은 반드시 ~controller.java 로 끝나야 한다. 

또한 컨트롤러 파일의 경로는 위의 SwaggerConfig 파일에서 설정해준대로 'com.example.javafullcourse.swagger'의 하위에 존재해야 한다. 

위와 같이 한 후 실행시켜보면 아래와 같은 에러가 발생할 수 있다.

Failed to start bean 'documentationPluginsBootstrapper'; nested exception is java.lang.NullPointerException: Cannot invoke "org.springframework.web.servlet.mvc.condition.PatternsRequestCondition.getPatterns()" because "this.condition" is n...

이는 spring boot와 spring fox의 버전이 맞지 않아 발생하는 에러이다. 이런 경우 application.yml 파일에 아래와 같이 내용을 추가해주면 문제가 해결 된다.

즉 spring: mvc: pathmatch: matching-strategy: ant_path_matcher를 추가해주면 된다. 이는 기존에 api 컨트롤러와 매칭된 경로의 기본값이 'path_pattern_parser'로 되어있어 맞지 않는 경로를 spring: mvc: pathmatch: matching-strategy: ant_path_matcher를 추가해줌으로써 경로를 맞추어 준 것이라 할 수 있다.

위와 같이 하여 실행한 후 서버 localhost:[서버포트]/swagger-ui/index.html로 들어가면 아래오 같이 swagger 창이 나오는 것을 확인할 수 있다. ex) http://localhost:8080/swagger-ui/index.html

출처

https://velog.io/@kijrary/Spring-Boot-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8Gradle-%EC%97%90%EC%84%9C%EC%9D%98-Swagger-3.0.0-%EC%84%A4%EC%A0%95-%EB%B0%A9%EB%B2%95

반응형