我有类似
的东西@XmlElementWrapper(name="Mylist")
List<Items> myItems = new ArrayList<Items>()
就像
一样<Mylist>
<myItems>item 1</myItems>
<myItems>item 2</myItems>
<myItems>item 3</myItems>
</Mylist>
是否有可能使这更像是
<Mylist>
<myItems>item 1, item 2, item 3</myItems>
</Mylist>
因为我所追求的数据无论如何都只是文本?
答案 0 :(得分:5)
您可以使用@XmlList将其设为空格分隔值。
对于以逗号分隔的列表,您需要使用XmlAdapter。有关XmlAdapter的更多信息,请参阅:
答案 1 :(得分:2)
这里有XmlAdapter
来处理以逗号分隔的列表:
import java.util.ArrayList;
import java.util.List;
import javax.xml.bind.annotation.adapters.XmlAdapter;
public class CommaSeparatedListAdapter extends XmlAdapter<String, List<String>> {
@Override
public List<String> unmarshal(final String string) {
final List<String> strings = new ArrayList<String>();
for (final String s : string.split(",")) {
final String trimmed = s.trim();
if (trimmed.length() > 0) {
strings.add(trimmed);
}
}
return strings;
}
@Override
public String marshal(final List<String> strings) {
final StringBuilder sb = new StringBuilder();
for (final String string : strings) {
if (sb.length() > 0) {
sb.append(", ");
}
sb.append(string);
}
return sb.toString();
}
}
您可以这样使用它:
@XmlElementWrapper(name="Mylist")
@XmlJavaTypeAdapter(CommaSeparatedListAdapter.class)
List<Items> myItems = new ArrayList<Items>()
答案 2 :(得分:0)
您可以通过使字段为瞬态@XmlTransient
并创建一种用于计算字符串(以逗号分隔)的方法来实现这一目标。
@XmlTransient
List<Items> myItems = new ArrayList<Items>()
@XmlElement(name = "myItems")
public String getItemsAsCommasSeparated() {
return String.join(", ", myItems);
}
关于包装<Mylist>
,如果确实有必要,则必须将列表包装到另一个对象中。