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

Java Jackson XML转对象遇UnrecognizedPropertyException问题求助

解决Jackson XML反序列化时的UnrecognizedPropertyException异常

看起来你在使用Jackson将XML转换成Java对象时遇到了属性识别异常,我来帮你分析问题并给出解决办法。

异常原因

你看到的UnrecognizedPropertyException是因为Jackson的映射逻辑被错误的注解配置搞乱了:

  • 你的PropertyXml类里多了一个property字段和对应的注解,这会让Jackson误以为<property>节点的文本内容需要映射到这个字段,但实际上<property>只有属性没有文本,反而干扰了属性的映射。
  • Properties类的注解配置完全错误,没有正确指定它要处理的<property>子节点,导致Jackson把<property>的name属性当成了Properties类的字段,自然就找不到对应的定义了。

修正步骤

下面是修正后的关键代码,你可以直接替换对应的类:

1. 修正PropertyXml类

移除多余的property字段,只保留属性对应的字段:

@Data
public class PropertyXml {
    @JacksonXmlProperty(isAttribute = true, localName = "name")
    private String name;

    @JacksonXmlProperty(isAttribute = true, localName = "value")
    private String value;
}

这个类直接对应XML中的<property>节点,Jackson会自动把节点的name和value属性映射到这两个字段上。

2. 修正Properties类

调整注解,正确指定子节点的映射关系:

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Properties {
    // 禁用额外包裹,因为<Properties>本身就是列表的父节点
    @JacksonXmlElementWrapper(useWrapping = false)
    // 声明列表元素对应XML的<property>节点
    @JacksonXmlProperty(localName = "property")
    private List<PropertyXml> properties = new ArrayList<>();
}

这里的核心是告诉Jackson:<Properties>节点下直接包含多个<property>子节点,这些子节点要映射到properties列表中。

3. 完善其他类的注解

别忘了给ConnectionData、Endpoint、Link这些类加上@Data注解(或者手动添加getter/setter),Jackson需要通过这些方法来给字段赋值。另外,Password类也需要正确配置属性映射,比如:

@Data
public class Password {
    @JacksonXmlProperty(isAttribute = true, localName = "encryptInitString")
    private String encryptInitString;

    @JacksonXmlProperty(isAttribute = true, localName = "encrypted")
    private String encrypted;

    @JacksonXmlProperty(isAttribute = true, localName = "value")
    private String value;
}

验证

替换完这些代码后,重新运行你的反序列化服务,应该就能成功将XML解析成Link对象了,不会再抛出那个属性识别异常。

内容的提问来源于stack exchange,提问作者María Del Dedo Castillo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:54:47