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);
}
}