반응형

Swagger SpringMvc가 어느 순간 SpringFox라는 이름으로 Swagger OpenAPI 2.0의 스펙을 가지고 새롭게 바뀌었다.

기존에는 Swagger ui도 github에서 다운받아서 어거지로 넣는 느낌이었지만, ui도 같이 maven에 올라가 있다.


SpringFox의 존재를 알게 된건, Legacy인 Swagger SpringMVC를 오랫만에 적용해보니, 2.0으로 업그레이드 하라는 문구가 나와서,

링크를 클릭해보니 이쪽으로 연결을 시켜주었다.


모든 것은 Spring Boot + Maven 기준임.


그럼 Migration작업을 시작해보자.


1. Maven 의존성 변경

 - 기존 (2013년을 마지막으로 더이상 버전업이 되지 않음)

<dependency>
    <groupId>com.mangofactory</groupId>
    <artifactId>swagger-springmvc</artifactId>
    <version>1.0.2</version>
</dependency>



 - 변경 (2016년 3월에 2.4버전이 나옴. 꾸준히 업데이트 중)

<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger2</artifactId>
    <version>2.4.0</version>
    <scope>compile</scope>
</dependency>




2. Annotation이 변경됨

 - 기존 : @EnableSwagger

 - 변경 : @EnableSwagger2

 ※ 2.4 버전 기준으로 deprecated되었다는 warning이 발생하지만, 무시해도 됨.



3. 생성해야될 Bean이 달라짐.

 - 기존 : SpringSwaggerConfig를 Bean으로 불러와서, SwaggerSpringMvcPlugin을 생성하여 Bean으로 등록

          SwaggerUI에서 context-path가 두번 붙는 문제도 있어서, SwaggerPathProvider도 구현해서 넣어줘야 했었다.

          api 패턴도 정규식으로 넣어야 제대로 찾았었다.

예시 코드) 

@Autowired
private SpringSwaggerConfig springSwaggerConfig;

@Bean
public SwaggerSpringMvcPlugin swaggerSpringMvcPlugin() {
    return new SwaggerSpringMvcPlugin(this.springSwaggerConfig)
            .apiInfo(new ApiInfo("ApiInfo", null, null, null, null, null))
            .useDefaultResponseMessages(false)
            .includePatterns(".*api.*")
            .pathProvider(new SwaggerPathProvider() {               
                    @Override
                    protected String getDocumentationPath() {
                        return "/";
                    }
                    
                    @Override
                    protected String applicationPath() {
                        return "";
                    }
            });
}



 - 변경 : Docket이라는 애만 만들어서 Bean으로 등록

          api 패턴도 정규식이 아닌 누구나 알아볼 수 있도록 *.*로 바뀜 (*만 넣으면 못찾는 문제가 있음..)

예시 코드)

@Bean
public Docket api() {
    return new Docket(DocumentationType.SWAGGER_2)
            .select()
            .apis(RequestHandlerSelectors.any())
            .paths(PathSelectors.regex("/api/*.*"))             
            .build()
            .apiInfo(new ApiInfoBuilder().title("ApiInfo").build());
}




4. Swagger UI 

 - 기존 : https://github.com/swagger-api/swagger-ui 가서 git clone해다가 dist폴더명을 swagger로 바꾸어주고, src/main/resources/static 폴더에 옮겨주어야 한다. 

          접속주소 => http://ip:port/{context-path}/swagger/index.html

          favicon이 swagger의 icon으로 붙음.


 - 변경 : maven 의존성만 추가 (Spring boot가 아니라면 resource handling 설정이 필요함)

<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger-ui</artifactId>
    <version>2.4.0</version>
    <scope>compile</scope>
</dependency>


          접속주소 => http://ip.port/{context-path}/swagger-ui.html

          favicon 없음 (아마 webapp의 favicon을 따라가지 않을까 생각됨)


아직 Spring 공식홈 Project목록에는 보이지 않으나, 사용하는 사람이 꽤 많아서 언젠간 생기지 않을까 싶음.

반응형
,
반응형