[英]How to give different name for each list value in XML mapping?
I have the following annotation using javax.xml.bind.annotation.XmlElement:我使用 javax.xml.bind.annotation.XmlElement 有以下注释:
@XmlElement
public List<String> getKeywords() {
return keywords;
}
Which produces the following XML:它产生以下 XML:
<keywords>keyword1</keywords>
<keywords>keyword2</keywords>
But I would like to get the below Output:但我想得到以下输出:
<A>keyword1</A>
<B>keyword2</B>
I mean some customized tag names for each list value.我的意思是每个列表值的一些自定义标签名称。
Here is an example of such mapping.这是此类映射的示例。 Main idea is to set @XmlAnyElement on a list getter and provide some mapping function between keywords and tag names.
主要思想是在列表 getter 上设置 @XmlAnyElement 并提供一些关键字和标签名称之间的映射功能。 In this example it is achieved using a map, but implementation could be different depending on your logic.
在此示例中,它是使用地图实现的,但根据您的逻辑,实现可能会有所不同。
Please note, that it could be difficult to deserialize resulting XML.请注意,反序列化生成的 XML 可能很困难。
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.xml.bind.JAXBElement;
import javax.xml.bind.annotation.XmlAnyElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.namespace.QName;
@XmlRootElement(name = "response")
public class Response {
private List<String> keywords;
static Map<String, String> names = new HashMap<>();
static {
names.put("keyword1", "A");
names.put("keyword2", "B");
}
private String getElementName(String keyword) {
return names.get(keyword);
}
@XmlAnyElement
public List<JAXBElement<String>> getKeywords() {
List<JAXBElement<String>> elements = new ArrayList<>();
keywords.forEach(keyword -> {
elements.add(new JAXBElement(
new QName(getElementName(keyword)),
String.class,
keyword)
);
});
return elements;
}
public void setKeywords(List<String> keywords) {
this.keywords = keywords;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.