Я пытаюсь использовать интерфейс в качестве RequestBody в Feign, но Feign создает пустой объект в качестве запроса. Это невозможно или я здесь что-то не так делаю? Пока что я не смог найти ничего по этой теме.
Это упрощенный пример того, что я пытаюсь сделать (на самом деле есть 3 разных типа запросов)
interface BookingClient {
@RequestLine("POST /booking")
@Headers("Content-Type: application/json")
fun createBooking(request: BookingRequest): BookingResponse
}
interface BookingRequest
data class NormalBooking(
val product: String
): BookingRequest
data class DiscountedBooking(
val product: String,
val discountCode: String
): BookingRequest
// Client Configuration
val client = Feign.builder()
.client(feign.okhttp.OkHttpClient())
.errorDecoder(BadEntityErrorDecoder())
.encoder(JacksonEncoder())
.decoder(JacksonDecoder(listOf(KotlinModule(), JavaTimeModule())))
.logger(feign.Logger.JavaLogger())
.logLevel(feign.Logger.Level.FULL)
.target(BookingClient::class.java, mockServer.getUrl())
ЕслиТеперь я называю createBooking()
с любой реализацией, Feign всегда сериализует
{}
вместо
{
"product": "productA"
}
и
{
"product": "productA",
"discountCode": "discountCode"
}