본문 바로가기
Spring

[Spring] 코틀린 springdoc-openapi 클래스명 중복 처리 방법

by 노력남자 2022. 9. 9.
반응형

springdoc-openapi를 사용 중인데 이상하게 response에 내가 설정한 class 필드들이 나오지 않았다.

 

내가 설정한 GetOrderResponse는 아래와 같았다.

 

data class GetOrderResponse(
    val product: Product
) {
    class Product(
        val id: Long
    )
}

 

근데 swagger에선 아래와 같이 나왔다.

 

 

? 도대체 왜 저렇게 나오는 거지..

 

좀 헤맸는데 원인을 찾아냈고 해결책도 찾았다.

 

원인

 

data class GetOrderResponse(
    val product: Product
) {
    class Product(
        val id: Long
    )
}
data class GetProductResponse(
    val product: Product
) {
    class Product(
        val id: Long,
        val name: String
    )
}

 

같은 이름의 class가 있어서 그랬던 거였다.

 

springdoc-openapi는 apidoc을 만들 때 클래스 이름을 쫙 읽어놓고 이름이 같으면 아까 읽어놓은 값을 넣어준다.

 

GetProductResponse에 있는 Product class를 먼저 읽어서 이 사단이 난 걸로 보인다.

 

해결책

 

당연히 우리와 같은 문제를 가진 사람들이 있었고 거기에 해답이 있었다.

 

 

Fully qualified names · Issue #548 · springdoc/springdoc-openapi

Hi, Is it possible to show fully qualified java type names in the schemas? Its quite possible there might be multiple classes with same class simple name but different package names used . R

github.com

 

1.4.4 버전부터 가능하다.

 

properties에 아래 옵션을 주면 해결된다.

 

fqn은 fully qualifed name이다.

 

패키지를 포함한 이름을 뜻한다.

 

springdoc.use-fqn=true

 

위 옵션을 안 주면 이렇게 나오던 게

 

 

패키지 이름까지 쭉 나오면서 제대로된 class를 가지고 온다.

 

단점은 패키지명까지 나와서 좀 보기 안 좋다?정도이다.

 

 

패키지 이름으로 구분하고 실제 swagger에서 보여지는 건 class 이름만 보여주면 딱 좋았을텐데 그게 좀 아쉽다.

반응형

댓글