2016-06-22 10 views
1

私にはHashmap<String, List<Object>>があり、ジャクソンとマップをマーシャリングしたいと思います。それは完全にJSONと協力し、このようになります:ジャクソンからXMLへのハッシュマップ整列 - 間違った構造

{ 
    "entriesByTable": { 
     "Karlsruhe": [ 
      { 
       "counts": 126, 
       "hashTag": "#Karlsruhe" 
      }, 
      { 
       "counts": 26, 
       "hashTag": "#jobs" 
      }, 
      { 
       "counts": 3, 
       "hashTag": "#etka16" 
      }, ... 

をしかし、それは私の構造は、このようなXMLに来るとき:

<?xml version="1.0"?> 
<Database> 
    <entriesByTable> 
    <Karlsruhe> 
     <hashTag>#Karlsruhe</hashTag> 
     <counts>127</counts> 
    </Karlsruhe> 
    <Karlsruhe> 
     <hashTag>#jobs</hashTag> 
     <counts>27</counts> 
    </Karlsruhe> 
    <Karlsruhe> 
     <hashTag>#etka16</hashTag> 
     <counts>3</counts> 
    </Karlsruhe> ... 

しかし、私がしたい/同じJSON-strucutreを必要とします

<Database> 
<entriesByTable> (mapname) 
    <Karlsruhe>  (key) 
    <entries>  (value (list)) 
    <entry> 
    <counts>126</counts> 
    <hashTag>#Karlsruhe</hashtag> 
    </entry> 
    </entries> 
    </Karlsruhe> 
</entriesByTable> 
</Database> 

私のクラス:

@JacksonXmlRootElement 
public class Database { 

    private static String DATABASE_LOCATION; 

    @JsonProperty 
    private Map<String, List<DatabankEntry>> entriesByTable = new HashMap<>(); ... 

セカンドクラス:

@JacksonXmlRootElement 
public class DatabankEntry implements Comparable<DatabankEntry> { 

    @JsonIgnore 
    private String tableName; 

    @JacksonXmlProperty 
    private String hashTag; 
    @JacksonXmlProperty 
    private int counts; 

誰かがアイデアを持っていると素晴らしいと思いますか?おそらく私は注釈を間違えたでしょうか?

答えて

0

[OK]を、私は自分で問題を処理しました。私はエントリのリストを含み、リストオブジェクトに注釈を付けた新しいクラスを作成しました。

@NoArgsConstructor 
public class DatabaseEntries { 

    @JacksonXmlProperty(localName="Entry") 
    @JacksonXmlElementWrapper(localName="Entries") 
    @JsonProperty 
    private List<DatabaseEntry> databaseEntries = new LinkedList<>(); 

    public int size(){ 
     return databaseEntries.size(); 
    } 

    @JsonIgnore 
    public List<DatabaseEntry> getAllEntries(){ 
     Collections.sort(databaseEntries); 
     return databaseEntries; 
    } 

    public void add(DatabaseEntry databaseEntry){ 
     databaseEntries.add(databaseEntry) ; 
     } 

} 

私のHashMapのは、このようになり、今Hashmap<String,Object>

@JsonProperty 
@JacksonXmlProperty(localName = "EntriesByTable") 
private Map<String, DatabaseEntries> entriesByTable = new HashMap<>(); 

と私のXML:

<?xml version="1.0"?> 
<Database> 
    <EntriesByTable> 
    <Karlsruhe> 
     <Entries> 
     <Entry> 
      <HashTag>#Karlsruhe</HashTag> 
      <Counts>700</Counts> 
     </Entry> 
     <Entry> 
      <HashTag>#Feuerwehr</HashTag> 
      <Counts>114</Counts> 
     </Entry> 
.... 

JSON:

{ 
    "entriesByTable": { 
     "Karlsruhe": { 
      "databaseEntries": [ 
       { 
        "counts": 700, 
        "hashTag": "#Karlsruhe" 
       }, 
       { 
        "counts": 114, 
        "hashTag": "#Feuerwehr" 
       }, 
関連する問題