2016-05-25 32 views
1

我有一個只包含一個hasmap類型屬性的對象。用hasmap將對象轉換爲XML使用Jackson

public class Application { 

    private Map<String,Object> map2; 

    public Map<String, Object> getMap2() { 
     return Collections.unmodifiableMap(map2); 
    } 

    public void setMap2(Map<String, Object> map2) { 
     this.map2 = map2; 
    } 
} 

我嘗試生成與傑克遜的XML:

Map<String,Object> map = new HashMap<String, Object>(); 
map.put("key1", "value1"); 
map.put("key2", "value2"); 

XmlMapper xmlMapper = new XmlMapper(); 
xmlMapper.configure(ToXmlGenerator.Feature.WRITE_XML_DECLARATION, true); 
System.out.println(xmlMapper.writeValueAsString(app)); 

結果是:

<?xml version='1.0' encoding='UTF-8'?> 
<Application> 
    <Map2> 
     <key1>value1</key1> 
     <key2>value2</key2> 
    </Map2> 
</Application> 

但我想只有有:

<?xml version='1.0' encoding='UTF-8'?> 
<Application> 
    <key1>value1</key1> 
    <key2>value2</key2> 
</Application> 

我怎樣才能移除Map2元素?

回答

1

使用HashMap而不是整個類。像

public class AppDao { 

    private Map<String,Object> Application; 

    public Map<String, Object> getMap2() { 
     return Collections.unmodifiableMap(map2); 
    } 

    public void setMap2(Map<String, Object> Application) { 
    this.Application = Application; 
    } 
    public Map<String,Object> getMap2(){ 
     return Application; 
    } 
} 

現在使用HashMap來生成XML

xmlMapper.configure(ToXmlGenerator.Feature.WRITE_XML_DECLARATION, true); 
System.out.println(xmlMapper.writeValueAsString(app.getMap2())); 
+0

我已經嘗試過這解。如果我使用HashMap而不是整個對象,則獲得:<?xml version ='1.0'encoding ='UTF-8'?> value1 value2。那麼我怎麼才能將HashMap重命名爲Application? – gduh

+0

是的,它實際上獲得了hasmap類。 – noshusan

+0

那麼,我創建了一個擴展HashMap類的新類Application。現在沒關係。但解決方案並非真正的「乾淨」! – gduh

0

我認爲最好的辦法是使用上述getMap2()@JsonAnyGetter註解。是的它的JSON註解,但你必須使用它的XML和JSON https://github.com/FasterXML/jackson-dataformat-xml#additional-annotations

public static class Application { 

    private Map<String,Object> map2; 

    @JsonAnyGetter 
    public Map<String, Object> getMap2() { 
     return Collections.unmodifiableMap(map2); 
    } 

    public void setMap2(Map<String, Object> map2) { 
     this.map2 = map2; 
    } 

    // if you need deserialization 
    @JsonAnySetter 
    public void setMap2(String key, Object value) { 
     map2.put(key, value); 
    } 
} 

2擋選項(如果你可以改變你的結構)是使用

public static class Application extends HashMap<String,Object> {} 

// or if you want to change map class name: 
@JsonRootName("Application") 
public static class MyMap extends HashMap<String,Object>{} 
相關問題