엄지월드

간단한 Swagger 설정 방법 본문

java/Spring

간단한 Swagger 설정 방법

킨글 2022. 9. 7. 17:31

build.gradle 추가

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

application.properties 추가

spring.mvc.pathmatch.matching-strategy=ant_path_matcher

 

SwaggerConfig 추가

package com.gworld.weather.config;

import io.swagger.annotations.SwaggerDefinition;
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;

@Configuration
@SwaggerDefinition
public class SwaggerConfig {
    @Bean
    public Docket api(){
        return new Docket(DocumentationType.SWAGGER_2)
                .select()
                .apis(RequestHandlerSelectors.any())
                .paths(PathSelectors.any())
                .build().apiInfo(apiInfo());
    }

    private ApiInfo apiInfo(){
        return new ApiInfoBuilder()
                .title("title")
                .description("description")
                .version("1.0")
                .build();
    }
}

주소에 http://localhost:8080/swagger-ui/index.html 입력

 

내가 만들지 않은 basic-error-controller를 보여주고 싶지 않고,
프로젝트에 있는 API 목록들만 가지고 오고 싶은 경우 아래와 같이 경로를 지정해준다.

.apis(RequestHandlerSelectors.basePackage("com.gworld.weather"))

Path중에 특정 API들만 보여주고 싶은 경우 ant 패턴을 통해서 설정해줄 수 있다.

예로 들면, 모든 데이터 삭제나 특정 개발을 위해서 잠깐 만든 메소드들의 경우 보여줄 필요가 없거나, 보여주면 안되므로 해당 부분들을 처리하기 위해서 설정해줄 수 있다. 

.paths(PathSelectors.ant("/read/**"))

 

 

그리고 마지막으로 API들을 설명해주기 위해서 Controller 에서 @ApiOperation과 @ApiParam을 설정해 줄 수 있다.

먼저, @ApiOperation의 경우에는 기본적으로 method의 이름인 deleteDiary, 설명인 Parameters가 보여지지만

아래와 같이 설정해줄 수 있다.

@PostMapping("/create/diary")
@ApiOperation(value="다이어리 생성 API", notes = "다이어리 생성 API의 설명은...")
void createDiagry(){
    ...
    ...
}

 

그리고 파라미터도 형식을 명확하게 알려주고, 설명을 해주기 위해서는 ApiParam을 활용할 수 있다.

@PostMapping("/create/diary")
@ApiOperation(value="다이어리 생성 API", notes = "다이어리 생성 API의 설명은...")
void createDiagry(
        @RequestParam @DateTimeFormat(iso=DateTimeFormat.ISO.DATE)
        @ApiParam(value="조회할 기간의 마지막날", example = "2020-02-02")
        LocalDate date,
        @RequestBody String text){
    
        diaryService.createDiagry(date, text);
}

Comments