ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Swagger 적용 방법
    java 2021. 5. 13. 01:31

    의존성 추가

    dependencies {
    	...
    	implementation 'io.springfox:springfox-swagger2:2.9.2'
    	implementation 'io.springfox:springfox-swagger-ui:2.9.2'
    	...
    }

     

    SwaggerConfig

    의존성을 추가했다면 스웨거에 대한 설정을 할 수 있는 config파일을 만들어 스웨거 문서를 생성하는데 필요한 설정을 추가합니다.

    @Configuration
    @EnableSwagger2
    public class SwaggerConfig {
    
        @Bean
        public Docket api(){
            return new Docket(DocumentationType.SWAGGER_2)
                    .consumes(getConsumeContentTypes())
                    .produces(getProduceContentTypes())
                    .apiInfo(getApiInfo())
                    .select()
                    .apis(RequestHandlerSelectors.basePackage("com.project.example.controller"))
                    .paths(PathSelectors.ant("/api/**"))
                    .build();
        }
    
        private Set<String> getConsumeContentTypes() {
            Set<String> consumes = new HashSet<>();
            consumes.add("application/json;charset=UTF-8");
            consumes.add("application/x-www-form-urlencoded");
            return consumes;
        }
    
        private Set<String> getProduceContentTypes() {
            Set<String> produces = new HashSet<>();
            produces.add("application/json;charset=UTF-8");
            return produces;
        }
    
        private ApiInfo getApiInfo() {
            return new ApiInfoBuilder()
                    .title("example project REST API")
                    .description("Example project Java Backend REST API Guide Document")
                    .contact(new Contact(
                            "example project",
                            "https://www.project.com/",
                            "example@project.com"))
                    .version("1.0")
                    .build();
        }
    }

     

    @EnableSwagger2

    어노테이션을 통해 Swagger2 버전을 활성화 합니다.

     

    Docket

    Swagger 설정의 핵심이 되는 Bean입니다.

    Docket의 설정 정보는 다음과 같습니다.

     

    annotation description
    useDefaultResponseMessages() false로 설정시, swagger에서 제공해주는 응답코드 ( 200,401,403,404 )에 대한 기본 메시지를 제거합니다.
    groupName() Docket Bean이 한 개일 경우
    * 기본 값은 default이므로, 생략가능합니다.

    여러 Docket Bean을 생성했을 경우
    * groupName이 충돌하지 않아야 하므로, 각 Docket Bean의 name을 명시합니다.
    select() ApiSelectorBuilder를 생성합니다.
    apis() api 스펙이 작성되어 있는 패키지를 지정합니다.
    paths() apis()로 선택되어진 API중 특정 path 조건에 맞는 API들을 다시 필터링하여 문서화합니다.
    apiInfo() 제목, 설명 등 문서에 대한 정보들을 보여주기 위해 호출합니다.
    consumes() HTTP 요청시 어떤 문서 타입을 지정할 수 있는지를 나타냅니다.
    produces() 응답 객체 반환시 어떤 문서 타입으로 반환 하는지를 나타냅니다.

    스웨거가 적용됬다면 {server-url}/swagger-ui.html 에서 만들어진 문서를 확인할 수 있습니다.

     

    Controller

    스웨거를 적용한 후, API에 대한 자체 스펙은 컨트롤러에서 작성하게 됩니다.

    다음은 실제로 작성되어있는 코드의 예시를 보여줍니다.

    @Api(tags = "ExampleController", description = "DATA API")
    @RequiredArgsConstructor
    @RestController
    @RequestMapping("/api/datas")
    public class exampleController {
        @ApiOperation(
                value = "데이터 호출",
                notes = "파라미터로 요청한 데이터를 호출 합니다.")
        @ApiImplicitParams({
                @ApiImplicitParam(name="param1", value = "param1 이름"),
                @ApiImplicitParam(name="param2", value = "param2 이름"),
                @ApiImplicitParam(name="param3", value = "param3 이름")})
        @GetMapping
        public ResponseEntity<?> getData(@RequestParam(value = "param1", defaultValue = "") String param1,
                                         @RequestParam(value = "param2", defaultValue = "") String param2,
                                         @RequestParam(value = "param3", defaultValue = "") String param3)
                                         {
                                         ...
                                           }

     

    • 개발중인 프로젝트에 대해서는 각 Controller의 @requestMapping가 적용된 메서드마다 @ApiOperation, @ApiImplicitParams를 작성하도록 합니다.
    • @ApiResponses와 example은 기본값을 사용하도록 합니다.

    각 설정값에 대한 설명은 다음과 같습니다.

    annotationdescription

    @Api 해당 클래스가 Swagger 리소스라는 것을 명시합니다.
    value
    * 태그를 작성합니다.
    tags
    * 사용하여 여러 개의 태그를 정의할 수도 있습니다.
    @ApiOperation 한 개의 operation(즉 API URL과 Method)을 선언합니다.
    value
    * API에 대한 간략한 설명(제목같은 느낌으로)을 작성합니다.
    notes
    * 더 자세한 설명을 작성해줍니다.
    @ApiResponse operation의 가능한 response를 명시합니다.
    code
    * 응답코드를 작성합니다.
    message
    * 응답에 대한 설명을 작성합니다.
    responseHeaders
    * 헤더를 추가할 수도 있습니다.
    @ApiImplicitParam 파라미터에 대한 정보를 명시합니다.
    name
    * 파라미터를 지정 합니다.
    value

    * 파라미터 정보를 작성합니다.
    required
    * 필수 파라미터이면 true, 아니면 false를 작성합니다.
    dataTypeClass
    * 파라미터의 타입을 작성합니다.
    example
    * 테스트를 할 때 보여줄 예시를 작성합니다.

     

    참고자료


    'java' 카테고리의 다른 글

    JAVA | to JSON  (0) 2021.05.11
Designed by Tistory.