JAXB可以将ArrayList输出为逗号分隔的值吗?

问题描述 投票:4回答:3

我有这样一个东西

@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>

因为我所要找的数据反正都只是文本的?

java xml jaxb marshalling
3个回答
6
投票

您可以使用 @XmlList 使其成为一个以空格分隔的值。

对于逗号分隔的列表,您需要使用 XmlAdapter. 更多关于 XmlAdapter 见。


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>()

0
投票

你可以通过将字段变成瞬态来实现这个目的。@XmlTransient 并创建一个用逗号分隔的String计算方法。

@XmlTransient
List<Items> myItems = new ArrayList<Items>()

@XmlElement(name = "myItems")
public String getItemsAsCommasSeparated() {
    return String.join(", ", myItems);
}

关于包装 <Mylist> 如果真的有必要,你将不得不把列表包装成另一个对象。

© www.soinside.com 2019 - 2024. All rights reserved.