-
[Spring Boot] springdoc 사용 시 외부 서버 OAS3.0 동적으로 불러오기자바 ( Java )/스프링 ( Spring ) 2022. 1. 25. 13:24
application 설정에 springdoc.swagger-ui.urls 를 설정하면 다른 서버의 OpeanAPI 3.0 규격의 JSON, YAML 파일을 swagger UI로 보여줄 수 있는데, 이 부분을 동적으로 설정할 해야하는 상황이 생겨 남깁니다.
해당 설정 사용 시, 서버의 CORS 설정을 꼭 확인하세요.
<!-- spring doc --> <dependency> <groupId>org.springdoc</groupId> <artifactId>springdoc-openapi-ui</artifactId> <version>1.6.4</version> </dependency>
# application.yaml springdoc: api-docs: enabled: false # 아래 설정을 동적으로 설정 할 겁니다. # swagger-ui: # urls-primary-name: "Articles API" # urls: # - name : "Articles API" # url : "http://localhost:9081/docs/openapi-3.0.json" # - name : "Articles API2" # url : "http://localhost:9082/docs/openapi-3.0.json"
@Configuration public class SwaggerConfigure { @Bean public SpringDocConfiguration springDocConfiguration(){ // spring-doc.api-doc.enabled=false 설정으로 인해 자동생성되지 않음 return new SpringDocConfiguration(); } @Bean public SpringDocConfigProperties springDocConfigProperties() { // spring-doc.api-doc.enabled=false 설정으로 인해 자동생성되지 않음 return new SpringDocConfigProperties(); } // springdoc에 의해 생성된 SwaggerUiConfigProperties 인스턴스를 주입받아 // swagger urls 옵션을 설정한 뒤 Primary로 우선 적용되도록 함 @Primary @Bean public SwaggerUiConfigProperties swaggerUiConfigProperties(SwaggerUiConfigProperties swaggerUiConfigProperties) { // springdoc.swagger-ui.urls 설정 하는 부분. 각자 환경에 맞게 설정하세요. swaggerUiConfigProperties.setUrlsPrimaryName("Articles API"); Set<AbstractSwaggerUiConfigProperties.SwaggerUrl> swaggerUrls = new HashSet<>(); AbstractSwaggerUiConfigProperties.SwaggerUrl swaggerUrl1 = new AbstractSwaggerUiConfigProperties.SwaggerUrl(); swaggerUrl1.setName("Articles API"); swaggerUrl1.setUrl("http://localhost:9081/docs/openapi-3.0.json"); swaggerUrls.add(swaggerUrl1); AbstractSwaggerUiConfigProperties.SwaggerUrl swaggerUrl2 = new AbstractSwaggerUiConfigProperties.SwaggerUrl(); swaggerUrl2.setName("Articles2 API2"); swaggerUrl2.setUrl("http://localhost:9082/docs/openapi-3.0.json"); swaggerUrls.add(swaggerUrl2); swaggerUiConfigProperties.setUrls(swaggerUrls); return swaggerUiConfigProperties; } }
참고 사이트
- https://taetaetae.github.io/posts/a-combination-of-swagger-and-spring-restdocs/
Swagger와 Spring Restdocs의 우아한 조합 (by OpenAPI Spec)
MSA 환경에서의 API 문서화는 어떤 식으로 구성하는 걸까? 예컨대, 모듈이 10개 있다고 하면 각 모듈마다 API 문서가 만들어질 테고 API 문서를 클라이언트에 제공하기 위해서 각각의 (10개의) URL를
taetaetae.github.io
F.A.Q
The whole idea of springdoc-openapi is to get your documentation the closest to the code, with minimal code changes. If the code contains @Deprecated, sprindoc-openapi will consider its schema as Deprecated as well. If you want to declare a field on swagge
springdoc.org