spring boot + webFlux + openApi + swagger 적용

 

서론 없이 시작


1.일단 swagger ui부터 띄워본다.

build.gradle에 의존성을 추가해준다

https://mvnrepository.com/artifact/org.springdoc/springdoc-openapi-starter-webflux-ui/2.8.9

    // swagger
    implementation("io.swagger.core.v3:swagger-annotations:2.2.34")
    implementation("org.springdoc:springdoc-openapi-starter-webflux-ui:2.6.0")

 

starter 안 들어간걸로 하면 안 돌아감..

왤까..

 

build한 뒤에 local run해주면 ui가 뜬다


2. application.yml 작성

server:
  host:localhost
  port:8080

spring:
  application:
    name: adapter
  profiles:
    active: local

springdoc:
  api-docs:
    path: /api-docs
    groups:
      enabled: true
  swagger-ui:
    path: /swagger
    tags-sorter: alpha
    operations-sorter: alpha
  cache:
    disabled: true

복사한 뒤 페이지 새로고침

yml에서 정의한 태그가 자동으로 붙어있는 걸 볼 수 있다.


3. configuration 파일 작성

package org.example.adapater.common.config

import io.swagger.v3.oas.models.OpenAPI
import io.swagger.v3.oas.models.info.Info
import io.swagger.v3.oas.models.servers.Server
import org.springdoc.core.models.GroupedOpenApi
import org.springframework.context.annotation.Bean
import org.springframework.context.annotation.Configuration
import org.springframework.web.reactive.resource.ResourceUrlProvider

@Configuration
class SpringDocOpenapiConfig() {

    @Bean
    fun openApi(url: ResourceUrlProvider): OpenAPI {
        return OpenAPI()
            .servers(listOf(Server().url("http://localhost:8080")))
            .info(
                Info()
                .title("SpringDocOpenAPI")
                .description("SpringDocOpenAPI")
            )
    }

    @Bean
    fun testUtilitiesApi(): GroupedOpenApi {
        return GroupedOpenApi
            .builder()
            .group("test")
            .pathsToMatch("/**")
            .build()
    }
}

import되는 의존성이 일치하는지 잘 확인하시길...

test로 지정했던 group이 잘 생긴 것을 확인 가능


4. api 연동하기

4-1. 잘 돌아가는 컨트롤러를 준비해준다.

잘 돌아가는 컨트롤러의 모습

그러나 스웨거가 안되는 이유 : 스프링부트에 CORS 셋팅 안해줘서 (그럼 포스트맨은 왜 되는거임)

CORS 셋팅을 해주러 떠나자

4-2. CORS 셋팅

@Configuration
class WebFluxConfig : WebFluxConfigurer {
    override fun addCorsMappings(registry: CorsRegistry) {
        registry.addMapping("/**")
            .allowedOrigins("http://localhost:8080")
            .allowedMethods("GET", "POST", "PUT", "DELETE")
            .allowedHeaders("*")
            .allowCredentials(true)
    }
}

그리고 새로고침하면 끝