You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Feign发送POST请求时请求体字段为空问题求助

问题解决:Feign客户端POST请求体字段为空

问题根源

Feign默认使用的Jackson序列化器无法正确处理Kotlin普通类的val字段:

  • 普通Kotlin类没有自动生成Jackson所需的序列化逻辑,val字段缺少可被序列化器识别的访问方式
  • 缺少无参构造函数,Jackson无法实例化对象并注入字段值

解决方案

方案1:将Message改为data class

Kotlin的data class会自动生成符合序列化要求的getter方法,Jackson能直接识别并序列化字段:

@MarkAsOpen
data class Message(
    val phone: String,
    val text: String,
    val uuid: UUID = UUID.randomUUID()
)

方案2:给普通类添加无参构造函数与JsonProperty注解

如果不想改为data class,需手动添加无参构造函数,并通过@JsonProperty指定字段映射:

@MarkAsOpen
class Message(
    @JsonProperty("phone") val phone: String,
    @JsonProperty("text") val text: String,
    @JsonProperty("uuid") val uuid: UUID = UUID.randomUUID()
) {
    // 供Jackson使用的无参构造函数
    constructor() : this("", "", UUID.randomUUID())
}

方案3:确保Feign使用Jackson序列化器

在Feign配置类中明确指定使用Jackson进行编解码,避免使用不兼容Kotlin的序列化器:

@Configuration
class FeignConfig {
    @Bean
    fun feignEncoder(): Encoder {
        return JacksonEncoder()
    }

    @Bean
    fun feignDecoder(): Decoder {
        return JacksonDecoder()
    }
}

验证

修改后重新调用Feign客户端,服务端将能正确解析请求体中的字段值,与外部工具调用的效果一致。

内容的提问来源于stack exchange,提问作者Kacper

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 11:17:15