728x90
개요
Swagger를 서버에 배포했을 때 기존 코드로 API 명세서를 실행시키면 curl이 curl -x GET “https://127.0.0.1:8081/”로 실행이 되어서 상태 코드 200인데 안에 데이터가 비어있는 오류가 발생했다. 이를 해결하고자 Swgger 코드를 수정했다.
application.yml에 아래와 같은 코드 작성
servers:
- url: https://server address/
description: Production server
Swagger version 2.9.2에서 3.0으로 수정
//기존코드
//implementation group: 'io.springfox', name: 'springfox-swagger-ui', version: '2.9.2'
//implementation group: 'io.springfox', name: 'springfox-swagger2', version: '2.9.2'
//수정 코드
implementation group: 'io.springfox', name: 'springfox-boot-starter', version: '3.0.0'
SwaggerConfig파일 수정
import springfox.documentation.service.Server;
import springfox.documentation.spi.DocumentationType;
@Configuration
public class SwaggerConfig {
@Bean
public Docket restAPI() {
Server serverLocal = new Server("local", "http://localhost:8081", "for local usages", Collections.emptyList(), Collections.emptyList());
Server testServer = new Server("test", "https://서버주소", "for testing", Collections.emptyList(), Collections.emptyList());
return new Docket(DocumentationType.OAS_30)
.servers(serverLocal, testServer)
.apiInfo(apiInfo())
.select()
.apis(RequestHandlerSelectors.basePackage("j2kb.ponicon.scrap")) // 특정 패키지경로를 API문서화 한다. 1차 필터
.paths(PathSelectors.any()) // apis중에서 특정 path조건 API만 문서화 하는 2차 필터
.build()
.groupName("API 1.0.0") // group별 명칭을 주어야 한다.
.useDefaultResponseMessages(false); // 400,404,500 .. 표기를 ui에서 삭제한다.
}
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title("Spring Boot REST API test")
.version("v0.0.1")
.description("스크랩 JPA swagger api 입니다.")
.build();
}
}
Workaround 파일을 작성한다.
import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.servers.Server;
import org.springframework.stereotype.Component;
import springfox.documentation.oas.web.OpenApiTransformationContext;
import springfox.documentation.oas.web.WebMvcOpenApiTransformationFilter;
import springfox.documentation.spi.DocumentationType;
import javax.servlet.http.HttpServletRequest;
import java.util.Arrays;
@Component
public class Workaround implements WebMvcOpenApiTransformationFilter {
@Override
public OpenAPI transform(OpenApiTransformationContext<HttpServletRequest> context) {
OpenAPI openApi = context.getSpecification();
Server localServer = new Server();
localServer.setDescription("local");
localServer.setUrl("http://localhost:8081");
Server testServer = new Server();
testServer.setDescription("test");
testServer.setUrl("https://serveraddress");
openApi.setServers(Arrays.asList(localServer, testServer));
return openApi;
}
@Override
public boolean supports(DocumentationType documentationType) {
return documentationType.equals(DocumentationType.OAS_30);
}
}
servers에 보면 local과 서버 두 개가 추가된 것을 확인할 수 있다.
아래와 같이 curl이 서버 주소로 잘 실행되고 데이터 값도 잘 나오는 것을 확인할 수 있다.
728x90
'프로젝트 > 스크랩' 카테고리의 다른 글
스크랩 프로젝트를 진행하면서 현재 고민하고 있는 문제 (0) | 2022.10.21 |
---|---|
서버와 로컬에서 특정 URL의 테스트 값이 다름 (0) | 2022.10.17 |
YML 설정 파일 암호화 (0) | 2022.10.12 |
Swagger API 설정 방법, 실행 (0) | 2022.09.30 |
GitHub Action을 이용한 CI/CD (0) | 2022.09.30 |