Может ли JAXB выводить ArrayList в виде значений, разделенных запятыми? - PullRequest
4 голосов
/ 14 октября 2010

У меня есть что-то вроде

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

Так каквсе данные, которые мне нужны, в любом случае просто текстовые?

Ответы [ 2 ]

5 голосов
/ 14 октября 2010

Вы можете использовать @ XmlList , чтобы сделать это значение через пробел.

Для списка, разделенного запятыми, вам нужно будет использовать XmlAdapter . Для получения дополнительной информации о XmlAdapter см .:

2 голосов
/ 14 января 2015

Вот 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>()
...