有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我有点像

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

因为我要的数据都是文本


共 (3) 个答案

  1. # 1 楼答案

    您可以通过将字段设置为transient@XmlTransient并创建一个用逗号分隔的字符串计算方法来实现这一点

    @XmlTransient
    List<Items> myItems = new ArrayList<Items>()
    
    @XmlElement(name = "myItems")
    public String getItemsAsCommasSeparated() {
        return String.join(", ", myItems);
    }
    

    关于包装<Mylist>如果确实有必要,您必须将列表包装到另一个对象中

  2. # 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>()