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

ObjectMapper反序列化MyErrorMessage报错无字符串参数构造方法如何解决

问题原因

你遇到的反序列化错误是以下几个问题共同导致的:

  • 首先JSON结构中errorMessage字段存在两种异构类型:
    • datadetail层级下的errorMessage是字符串类型:"errorMessage": "ERROR with aKey"
    • aTypes子元素中的errorMessage是对象类型:"errorMessage": {"message": "Not found"}
  • Jackson解析datadetail.errorMessage时,需要将字符串反序列化为你定义的MyErrorMessage对象,虽然你已经声明了单String参数的构造函数,但存在两个问题导致Jackson无法识别该构造函数:
    1. 你没有为ObjectMapper注册Kotlin模块,Jackson默认无法识别Kotlin类的构造函数、数据类等特性
    2. 没有显式标记该单参数构造函数为Jackson的反序列化创建器
  • 除此之外你的代码还有几个隐藏问题也会导致后续反序列化失败:
    1. StatusType枚举只定义了OK、ERROR两个值,但JSON中datadetail.status取值为ONE,会报枚举值不匹配错误
    2. TypesResponse中字段命名为errMessage,但JSON对应字段名为errorMessage,会导致映射失败字段为null
    3. 代码存在笔误:你定义的ObjectMapper变量名为objectMapper,调用时写为objectmapper(大小写错误);方法入参是responseMessage,调用readValue时传的是不存在的message变量
    4. 你代码里用到的Instant、自定义类型MyKey、MyBKey、MyCKey如果没有对应的反序列化器也会报错
修复方案
  1. 首先添加jackson-module-kotlin依赖(如果未添加),构造ObjectMapper时注册Kotlin模块,同时可配置反序列化特性避免后续错误:
val objectMapper = ObjectMapper()
    .registerModule(KotlinModule.Builder().build())
    // 可选配置:遇到未知枚举值时转为null,不会直接报错
    .configure(DeserializationFeature.READ_UNKNOWN_ENUM_VALUES_AS_NULL, true)
  1. 给MyErrorMessage的单String参数构造函数添加@JsonCreator注解,显式告诉Jackson该构造函数用于从字符串值反序列化:
data class MyErrorMessage(
    @JsonProperty("message")
    val message: String,
    @JsonProperty("context")
    val context: MyContext?,
){
    @JsonCreator // 新增注解
    constructor(message: String) : this(
        message = message,
        context = null
    )
    // 枚举定义不变
}
  1. 修正StatusType枚举,添加缺失的ONE值:
enum class StatusType{
    OK,
    ERROR,
    ONE // 新增
}
  1. 修正TypesResponse的字段映射,要么改字段名要么加JsonProperty注解:
data class TypesResponse(
    val bKey: MyBKey,
    val cKey: MyCKey,
    val status: StatusType,
    @JsonProperty("errorMessage") // 新增注解
    val errMessage: MyErrorMessage? = null
)
  1. 修正代码笔误,调用readValue时使用正确的变量名和参数:
return objectMapper.readValue(responseMessage, MyResponse::class.java)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 17:24:03