簡體   English   中英

JAXB馬歇爾地圖 <Integer, ArrayList<String> &gt;

[英]JAXB Marshall Map<Integer, ArrayList<String>>

我有一個我想要編組的對象。

@XmlRootElement
public class BoxItem {
  @XmlElement
  Map<Integer, ArrayList<String>> intgerStringArrMap;

  BoxItem() {
      intgerStringArrMap = new HashMap<Integer, ArrayList<String>>();
      for (int i = 0; i < 3; i++) {
          ArrayList<String> stringArrayList = new ArrayList<String>();
          for (int j = 0; j < 10; j++) {
              stringArrayList.add(new BigInteger(130, new SecureRandom()).toString(32));
          }
         intgerStringArrMap.put(i, stringArrayList);
      }
  }
}

現在讓我們假設我們有一個boxItem = new BoxItem()

如果我調用jaxbMarshaller.marshal(boxItem,System.out);,則每個條目的值都為空。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<boxItem>
    <intgerStringArrMap>
        <entry>
            <key>0</key>
            <value/>
        </entry>
        <entry>
            <key>1</key>
            <value/>
        </entry>
        <entry>
            <key>2</key>
            <value/>
        </entry>
    </intgerStringArrMap>
</boxItem>

如何在Map值中對ArrayList中的元素進行編組?

您應該使用@XmlElementWrapper Annotation。它們用於圍繞Collections生成包裝器XML元素

ArrayList定義一個包裝器,如下所示,

class ListWrapper {

    @XmlElementWrapper(name = "wrapperList")
    private List<String> list;

    public void setList(List<String> list) {
        this.list = list;
    }
}

BoxItem類中定義如下地圖,

@XmlElementWrapper(name = "integerMap")
Map<Integer, ListWrapper> intgerStringArrMap;

這是完整的課程。

@XmlRootElement
public class BoxItem {

    @XmlElementWrapper(name = "integerMap")
    Map<Integer, ListWrapper> intgerStringArrMap;

    BoxItem() {
        intgerStringArrMap = new HashMap<Integer, ListWrapper>();
        for (int i = 0; i < 2; i++) {
            ArrayList<String> stringArrayList = new ArrayList<String>();
            ListWrapper wrapper = new ListWrapper();

            wrapper.setList(stringArrayList);

            for (int j = 0; j < 2; j++) {
                stringArrayList.add("2");
            }
            intgerStringArrMap.put(i, wrapper);
        }
    }

    public static void main(String[] args) throws JAXBException {
        BoxItem box = new BoxItem();
        JAXBContext jc = JAXBContext.newInstance(BoxItem.class);
        jc.createMarshaller().marshal(box, System.out);

    }
}

class ListWrapper {

    @XmlElementWrapper(name = "wrapperList")
    private List<String> list;

    public void setList(List<String> list) {
        this.list = list;
    }
}

運行以上應該得到以下輸出,

<boxItem>
   <integerMap>
      <entry>
         <key>0</key>
         <value>
            <wrapperList>
               <list>2</list>
               <list>2</list>
            </wrapperList>
         </value>
      </entry>
      <entry>
         <key>1</key>
         <value>
            <wrapperList>
               <list>2</list>
               <list>2</list>
            </wrapperList>
         </value>
      </entry>
   </integerMap>
</boxItem>

Jayamohan的答案是有效的,也許是首選的解決方案,但是如果您曾經不想修改RootElement類(B​​oxItem),您可以編寫自己的XmlAdapter以便JAXB知道如何處理Map<Integer, ArrayList<String>>

請參閱如何使用JAXB編寫Map <String,List <Objects >>來編寫自己的XmlAdapter

如何編組 ArrayList<object> [] 在 JAXB 中?<div id="text_translate"><p> 我有一個 ArrayList[] 類型的變量(列表),我想將它保存在 XML 中。 我嘗試了 JAXB,但它只保存了“”字符串(“的重復”等於 list.length)並且在 ArrayLists 中沒有任何項目。如果我嘗試二維數組,它工作正常。如果我嘗試 ArrayList,它也可以正常工作。我怎么解決這個問題?</p><p> 我的代碼類似於:</p><pre> @XmlRootElement public class SomeClass { @XmlElement(name="part") private final ArrayList&lt;Object&gt;[] list; ... constructor, which fills the list variable }</pre><p> 有人可以告訴我該怎么做嗎? 請。<br><br></p></div></object>

[英]How to marshall ArrayList<Object>[] in JAXB?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM