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

如何用JacksonXML注解将未知属性XML反序列化为Map<String,String>

用JacksonXML将动态属性的XML元素反序列化为Map<String,String>的注解方案

要把像 <to amount="345.00" service="service" purpose="rent" account="381"/> 这种属性不固定的XML元素反序列化为Map<String,String>,主要用到以下Jackson相关注解:

1. @JsonAnySetter

这是最常用的实现方式,通过在类中定义一个接收键值对的方法,让Jackson自动将所有未显式映射的XML属性存入Map:

public class ToElement {
    private Map<String, String> attributes = new HashMap<>();

    // 捕获所有XML属性并添加到Map
    @JsonAnySetter
    public void setAttribute(String key, String value) {
        attributes.put(key, value);
    }

    public Map<String, String> getAttributes() {
        return attributes;
    }
}

反序列化<to>元素时,所有属性(amount、service等)都会被自动存入attributes这个Map中。

2. 结合@JacksonXmlProperty(isAttribute = true)直接映射Map字段

如果不想单独编写setter方法,也可以直接在Map字段上标注@JacksonXmlProperty(isAttribute = true),配合可选的@JsonAnyGetter(用于序列化时将Map内容转为XML属性):

public class ToElement {
    @JacksonXmlProperty(isAttribute = true)
    private Map<String, String> attributes = new HashMap<>();

    // 可选:序列化时将Map内容转为XML属性
    @JsonAnyGetter
    public Map<String, String> getAttributes() {
        return attributes;
    }
}

这种方式会直接把XML元素的所有属性绑定到attributes Map上。

额外注意

如果<to>是XML的根元素,需要在类上添加@JacksonXmlRootElement(localName = "to"),让Jackson识别根元素名称:

@JacksonXmlRootElement(localName = "to")
public class ToElement {
    // ... 上述Map字段或setter方法
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 17:12:04