Java JAXB能否以逗号分隔的值输出ArrayList?

Java JAXB能否以逗号分隔的值输出ArrayList?,java,xml,jaxb,marshalling,Java,Xml,Jaxb,Marshalling,我有点像 @XmlElementWrapper(name="Mylist") List<Items> myItems = new ArrayList<Items>() @xmlementwrapper(name=“Mylist”) List myItems=new ArrayList() 结果就像 <Mylist> <myItems>item 1</myItems> <myItems>item 2</m

我有点像

@XmlElementWrapper(name="Mylist")
List<Items> myItems = new ArrayList<Items>()
@xmlementwrapper(name=“Mylist”)
List myItems=new ArrayList()
结果就像

<Mylist>
   <myItems>item 1</myItems>
   <myItems>item 2</myItems>
   <myItems>item 3</myItems>
</Mylist>

项目1
项目2
项目3
有没有可能让这更像

<Mylist>
   <myItems>item 1, item 2, item 3</myItems>
</Mylist>

项目1、项目2、项目3
因为我要查找的数据都是文本?

您可以使用它将其设置为空格分隔的值

对于逗号分隔的列表,您需要使用。有关详细信息,请参阅:


    • 这里有一个处理逗号分隔列表的
      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();
          }
      }
      
      import java.util.ArrayList;
      导入java.util.List;
      导入javax.xml.bind.annotation.adapters.XmlAdapter;
      公共类CommaSeparatedListAdapter扩展了XmlAdapter{
      @凌驾
      公共列表解组(最终字符串){
      最终列表字符串=新的ArrayList();
      for(最终字符串s:String.split(“,”)){
      最终修剪的字符串=s.trim();
      如果(trimmed.length()>0){
      字符串。添加(修剪);
      }
      }
      返回字符串;
      }
      @凌驾
      公共字符串封送处理(最终列表字符串){
      最终StringBuilder sb=新StringBuilder();
      for(最终字符串:字符串){
      如果(sb.length()>0){
      某人加上(“,”);
      }
      某人附加(字符串);
      }
      使某人返回字符串();
      }
      }
      
      您可以这样使用它:

      @XmlElementWrapper(name="Mylist")
      @XmlJavaTypeAdapter(CommaSeparatedListAdapter.class)
      List<Items> myItems = new ArrayList<Items>()
      
      @xmlementwrapper(name=“Mylist”)
      @XmlJavaTypeAdapter(CommaSeparatedListAdapter.class)
      List myItems=new ArrayList()
      
      您可以通过将字段设置为transient
      @xmltranient
      并创建一个用逗号分隔的字符串计算方法来实现这一点

      @XmlTransient
      List<Items> myItems = new ArrayList<Items>()
      
      @XmlElement(name = "myItems")
      public String getItemsAsCommasSeparated() {
          return String.join(", ", myItems);
      }
      
      @xmltransive
      List myItems=new ArrayList()
      @xmlement(name=“myItems”)
      公共字符串getItemsAsCommasSeparated(){
      返回字符串。join(“,”,myItems);
      }
      

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

      您是说在新的适配器类中,我只需将列表中的所有项目组合在一起,并在新创建的字符串上使用@XmlValue?是的,然后在另一个方向上,您可以在“,“性格。