협업에 도움이 되는 swagger 라이브러리

이경영·2022년 10월 12일
0

스프링부트2

목록 보기
9/19


해결하고자 나온 라이브러리 : swagger!

Swagger

  • 서버로 요청되는 API리스트를 HTML화면으로 문서화하여 테스트 할 수 있는 라이브러리
  • 이 라이브러리는 서버가 가동되면서 @RestCOntroller를 읽어 API를 분석하여 HTML문서를 작성함
  • 이 영상에서는 가장 많이 사용하고 있는 2.9.2버전을 사용할 예정

Swagger가 필요한 이유

  • REST API의 스펙을 문서화 하는 것은 매우 중요
  • API를 변경할때마다 레퍼런스 문서를 계속 바꿔야하는 불편함이 있음
  • 스웨거에서 자체 api test가능함


Swagger 설정 방법

@Configuration : 어노테이션 기반의 환경구성을 돕는 어노테이션
IoC COntainer에게 해당클래스를 Bean 구성 Class임을 알려줌
@Bean : 개발자가 직접 제어가 불가능한 외부 라이브러리등을 Bean으로 만들 경우 사용


package com.example.testproject.config;


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;

/**
 * @author Flature
 * @version 1.0.0
 */
@Configuration
@EnableSwagger2
public class SwaggerConfiguration {

    @Bean
    public Docket api(){ //Docket : DocumentationPlugin을 상속해서 클래스를 만드는 역할
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo()) //API의 정보들을 담음
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.example.testproject")) //어디를 범위로 스캔할것이냐
                .paths(PathSelectors.any())
                .build();
    }

    private ApiInfo apiInfo(){
        return new ApiInfoBuilder()
                .title("Around Hub Open API Test with Swagger")
                .description("설명 부분")
                .version("1.0.0")
                .build();
    }
}




  • 구동하는 도중 오류메세지
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 null

해결방안 : https://velog.io/@ohjinseo/SpringBoot-2.6-%EC%9D%B4%EC%83%81-springfox-swagger3.0-%EC%A0%81%EC%9A%A9-%EC%8B%9C-%EC%97%90%EB%9F%AC-%ED%95%B4%EA%B2%B0

원인 :
spring boot 2.6.0부터 요청 경로를 ControllerHandler에 매칭시키기 위한 전략의 기본값이 ant_path_matcher 전략 -> path_pattern_parser 전략으로 변경되었기 때문

application.properties
spring.mvc.pathmatch.matching-strategy=ant_path_matcher 추가

profile
꾸준히

0개의 댓글