当前位置: 首页 > 知识库问答 >
问题:

JAXB中HashMap的自定义封送处理

仉峻
2023-03-14

我有一个关于通过JAXB封送的小问题。

当前我有一个对象的HashMap

@XmlJavaTypeAdapter(HashMapAdapter.class)
private Map<String, Object> data;

由自定义HashMapAdapter封送的being

public class HashMapAdapter extends XmlAdapter<HashMapAdapter.AdaptedMap, 
Map<String, Object>> {

@XmlRootElement
public static class AdaptedMap {

    @XmlVariableNode("key")
    List<Data> entries = new ArrayList<>();
}

public static class Data {

    @XmlTransient
    public String key;

    @XmlValue
    public Object value;

}

@Override
public Map<String, Object> unmarshal(AdaptedMap v) throws Exception {
    throw new NotImplementedException();
}

@Override
public AdaptedMap marshal(Map<String, Object> map) throws Exception {
    AdaptedMap adaptedMap = new AdaptedMap();
    for (Map.Entry<String, Object> entry : map.entrySet()) {
        Data data = new Data();
        data.key = entry.getKey();
        data.value = entry.getValue();
        adaptedMap.entries.add(data);
    }
    return adaptedMap;
}
}

封送基于以下文章:http://blog.bdoughan.com/2013/06/moxys-xmlvariableNode-using-maps-key-as.html

HashMap由布尔值、长值或字符串值填充。

因此,关于Blog,预期的JSON输出应该是:

"data": {
    "booleanValue": true,
    "stringValue": "test",
    "longValue": 1234
}
"data": {
    "longValue": {
        "type": "long",
        "value": 1234
    },
    "stringValue": {
        "type": "string",
        "value": "test"
    },
    "booleanValue": {
        "type": "boolean",
        "value": true
    }
}

西蒙

共有1个答案

孙胜泫
2023-03-14

我手边没有一个MOxY实现,你能试试这个并告诉我它是否有效吗?

public static class Data {

    @XmlTransient
    public String key;

    @XmlElements({
        @XmlElement(type=Long.class),
        @XmlElement(type=String.class),
        @XmlElement(type=Boolean.class)
    })
    @XmlPath(".")
    public Object value;

}

编辑:

使用此方法时得到的输出是:

"data": {
    "stringValue": {
        "value": test
    },
    "booleanValue": {
        "value": true
    },
    "longValue": {
        "value": 1234
    }
}
 类似资料:
  • 问题内容: 我有许多需要自定义编组的结构。在测试时,我使用的是JSON和标准的JSON marshaller。由于它不会封送未导出的字段,因此我需要编写一个自定义的MarshalJSON函数,该函数运行良好。当我在父结构上调用json.Marshal时,该结构包含需要自定义编组的字段,它工作正常。 现在,我需要将所有内容封送给BSON进行MongoDB的工作,而我找不到任何有关如何编写自定义BSO

  • 我目前正在尝试将一些现有的XML解组到我手工创建的几个类中。问题是,我总是得到一个错误,告诉我,JaxB需要一个天气元素,但却找到了一个天气元素。(?) UnMarshalException:意外元素(URI:“http://www.aws.com/aws”,本地:“weather”)。需要的元素为<{}API>、<{}Location>、<{}Weather> 这就是我试图解析的XML: 我不太

  • 并设置Claas

  • 问题内容: 如何从外部包向结构添加自定义JSON封送处理?我无法将和添加到这些结构中。 问题答案: 您可以将该结构添加到您定义的结构中。然后添加功能,并给你的结构:

  • 我正在尝试使用JAXB进行封送处理。 我的输出是这样的: ...但我需要这样的输出: 如果取消对代码的注释,则会得到。没有它,我可以编译,但我不能得到所需的精确输出。 我的豆子长这样: 适配器类

  • 我正在构建一系列链接类,我希望这些类的实例能够整理成XML,这样我就可以将它们保存到一个文件中,以后再读进去。 目前我使用以下代码作为测试用例: XML输出为: 元素为空有什么原因吗?我希望它包含日期的字符串表示(即)。为了做到这一点,我需要编写一些我自己的代码吗? 的输出是: