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
相关产品推荐
相关产品推荐

