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

使用Jackson反序列化XML列表时出现MismatchedInputException异常

解决Jackson XML反序列化列表对象的问题

问题原因

你遇到的反序列化异常,是因为在使用@JsonCreator注解显式指定构造函数时,字段上的@field:前缀注解没有被Jackson正确关联到构造函数参数上,导致Jackson无法识别XML中的<categories>包装节点和<category>子节点的对应关系,进而无法将XML结构映射到List<Category>类型。

解决方案

有两种可行的修改方式:

方式一:将注解直接应用到构造函数参数上

去掉注解的@field:前缀,把注解直接加在构造函数的参数上,让Jackson在使用构造函数反序列化时能正确识别映射规则:

@JacksonXmlRootElement(localName = "response")
data class CategoriesResponse
@JsonCreator
constructor(
    @JacksonXmlElementWrapper(localName = "categories")
    @JacksonXmlProperty(localName = "category")
    val categoryList: List<Category>
)

data class Category
@JsonCreator
constructor(
    @JacksonXmlProperty(isAttribute = true)
    val id: Int
)

方式二:移除@JsonCreator注解

Kotlin的data类默认构造函数可以被Jackson自动识别,无需显式添加@JsonCreator注解。移除该注解后,字段上的@field:注解可以正常生效:

@JacksonXmlRootElement(localName = "response")
data class CategoriesResponse(
    @field:JacksonXmlElementWrapper(localName = "categories")
    @field:JacksonXmlProperty(localName = "category")
    val categoryList: List<Category>
)

data class Category(
    @field:JacksonXmlProperty(isAttribute = true)
    val id: Int
)

验证效果

修改后重新运行代码,序列化生成的XML结构保持不变,反序列化时可以正常将XML转换为CategoriesResponse对象,不会再抛出类型不匹配的异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 10:12:49