我试图在Feign中使用接口作为RequestBody,但是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"
}