gpt4 book ai didi

java - JAXB java.util.Map 绑定(bind)

转载 作者:搜寻专家 更新时间:2023-10-30 20:02:02 24 4
gpt4 key购买 nike

我有一个 Json 响应,如下所示:

{
"data": [
{
"param1": "value1",
"param2": "value2",
.
.
.
"paramN": "valueN"
}
]
}

我不知道参数的名称和数量。因此,我需要并希望将所有这些参数绑定(bind)到一个由 <"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 注释实现这种绑定(bind)?

提前致谢。

最佳答案

基本上您需要一个 xml 适配器。您可以修改 KeyValue 类的名称以获得您想要的特定输出。

参数.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
}

适配器.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;
}

关于java - JAXB java.util.Map 绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9478222/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com