关于通过JAXB进行编组,我遇到了一个小问题。
目前我有一个对象的HashMap
@XmlJavaTypeAdapter(HashMapAdapter.class)
private Map<String, Object> data;
由自定义HashMapAdapter编组的
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填充了布尔值,长值或字符串值。
因此,关于博客,预期的JSON输出应为:
"data": {
"booleanValue": true,
"stringValue": "test",
"longValue": 1234
}
但真正的结果是:
"data": {
"longValue": {
"type": "long",
"value": 1234
},
"stringValue": {
"type": "string",
"value": "test"
},
"booleanValue": {
"type": "boolean",
"value": true
}
}
我在Payara Micro 174上运行,因此在MOXy上作为JAXB提供商运行。
是否有可能摆脱“类型”/“值”嵌套?
最好的问候
西蒙
答案 0 :(得分:0)
我没有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
}
}
可悲的是,这与预期略有不同。