[SpringBoot/SpringDoc] Swagger 환경 설정

ㅎㅎ·2024년 3월 18일

Spring

목록 보기
2/3
post-thumbnail

SpringDoc

  • SpringBoot 3부터 2에서 사용되던 SpringFox가 제대로 지원되지 않는다
  • 3에서는 SpringDoc을 사용하는 것이 좋음

Swagger 세팅


1. build.gradle : Springdoc 의존성 추가

dependencies {
	// ...
	//Swagger
	implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.0.2'
}

2. application.yml : Swaggerdoc 라이브러리의 설정 정의

springdoc:
  swagger-ui:
    path: /api/v2 # 접속 경로
    groups-order: DESC # 내림차순
    tags-sorter: alpha # 알파벳순 정렬
    operations-sorter: method # 메소드 별 정렬
    disable-swagger-default-url: true
    display-request-duration: true
  api-docs:
    path: /v2/api-docs
  show-actuator: true
  default-consumes-media-type: application/json
  default-produces-media-type: application/json
  writer-with-default-pretty-printer: true # 예쁘게
  paths-to-match:
    - /api/v2/**

3. SwaggerConfig.java

package com.nextpage.backend.config;

import io.swagger.v3.oas.models.info.Info;
import io.swagger.v3.oas.models.Components;
import io.swagger.v3.oas.models.OpenAPI;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class SwaggerConfig {
    @Bean
    public OpenAPI openAPI() {
        return new OpenAPI()
                .components(new Components())
                .info(apiInfo());
    }

    private Info apiInfo() {
        return new Info()
                .title("NextPage API")
                .description("[ Base URL: http://localhost:8080/api/v2]\n\nNextPage의 API 문서")
                .version("2.0.0");
    }
}
  • apiInfo() : Swagger API 정보

API 등록 방법 @어노테이션 (예시)


@Tag(name = "인증", description = "인증 관련 api 입니다.")
@RestController
@RequestMapping("/api/auth")
public class AuthController {

    @Operation(summary = "로그인 메서드", description = "로그인 메서드입니다.")
    @ApiResponses(value = {
        @ApiResponse(responseCode = "200", description = "successful operation", content = @Content(schema = @Schema(implementation = LoginResponse.class))),
        @ApiResponse(responseCode = "400", description = "bad request operation", content = @Content(schema = @Schema(implementation = LoginResponse.class)))
    })
    @PostMapping(value = "login")
    public ResponseEntity<LoginResponse> login(LoginRequest loginRequest) {
        LoginResponse loginResponse = new LoginResponse("accessTokenValue", "refreshTokenValue");
        return ResponseEntity.ok().body(loginResponse);
    }
}
profile
Backend

0개의 댓글