JAXB java.util.Map绑定
我有一个Json响应,如下所示:
{
"data": [
{
"param1": "value1",
"param2": "value2",
.
.
.
"paramN": "valueN"
}
]
}
我不知道参数的名称和数量。因此,我需要并且想要将所有这些参数绑定到由<“ paramX”,“
valueX”>元组组成的java.util.Map字段。为此,我尝试了以下代码,但“ parametersMap”字段返回null。
@XmlRootElement(name="data")
@XmlAccessorType(XmlAccessType.FIELD)
public class Parameters {
@XmlElement
private Map<String,String> parametersMap;
// Getter and setter for parametersMap
}
如何使用JAXB批注实现这种绑定?
提前致谢。
-
基本上,您需要一个xml适配器。您可以摆弄KeyValue类上的名称,以获得所需的特定输出。
Parameter.java
import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlRootElement; import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; import java.util.Map; @XmlRootElement(name = "data") @XmlAccessorType(XmlAccessType.FIELD) public class Parameters { @XmlJavaTypeAdapter(value = Adapter.class) private Map<String, String> parametersMap; // Getter and setter for parametersMap }
Adapter.java
import javax.xml.bind.annotation.adapters.XmlAdapter; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; public class Adapter extends XmlAdapter<List<KeyValue>, Map<String, String>> { @Override public Map<String, String> unmarshal(List<KeyValue> v) throws Exception { Map<String, String> map = new HashMap<>(v.size()); for (KeyValue keyValue : v) { map.put(keyValue.key, keyValue.value); } return map; } @Override public List<KeyValue> marshal(Map<String, String> v) throws Exception { Set<String> keys = v.keySet(); List<KeyValue> results = new ArrayList<>(v.size()); for (String key : keys) { results.add(new KeyValue(key, v.get(key))); } return results; } }
KeyValue.java显然,这里放置了更好的JAXB标签。
import javax.xml.bind.annotation.XmlType; @XmlType public class KeyValue { public KeyValue() { } public KeyValue(String key, String value) { this.key = key; this.value = value; } //obviously needs setters/getters String key; String value; }
-
使用Jersey / JAXB / Jackson将Java.util.Map映射到JSON对象
2021-01-31 关注 0 浏览74 1答案
-
java.util.Map的交集
2021-01-31 关注 0 浏览72 1答案
-
如何在Java中将java.util.Map转换为scala.collection.immutable.Map?
2021-01-29 关注 0 浏览123 1答案
-
寻找替代java.util.Map的替代品
2021-01-29 关注 0 浏览123 1答案
-
如何从休眠查询中获取java.util.Map?
2021-02-01 关注 0 浏览87 1答案
-
下面哪个选项没有实现 java.util.Map 接口?
2021-10-12 关注 0 浏览1442 1答案
-
从json编码/解码到java.util.Map的库?
2021-01-31 关注 0 浏览91 1答案
-
JDK 8-“无法解析类型java.util.Map $ Entry”
2021-01-31 关注 0 浏览92 1答案
-
将java.util.Map [String,Object]转换为scala.collection.immutable.Map [String,Any]
2021-01-30 关注 0 浏览120 1答案
-
如何将XML转换为java.util.Map,反之亦然
2021-02-02 关注 0 浏览75 1答案