2016-05-25 43 views
0

我有一個使用Jersey 1.17.1和Jackson 1.9.2的REST Web服務。使用Jersey和Jackson反序列化後,HashMap爲空

的API看起來像這樣:

public class PlayerRequest { 
    private String language; 
    private String playerId; 
    private Map<String, String> params; 
} 

當此服務是由其他組件調用時,params地圖接收空:

PlayerRequest [language=null, playerId=100036343, params={}] 
從其他部件

原始請求:

PlayerRequest [language=null, playerId=100036343, params={context=mobile, countrycode=SE, partnerskin=8, locale=en_GB, ipaddress=62.209.186.13}] 

爲什麼反序列化後HashMap是空的?

回答

0

通過實施和適配器固定(javax.xml.bind.annotation.adapters.XmlAdapter)並使用@XmlJavaTypeAdapter在api中註解地圖

0

在你PlayerRequest類,創建@JsonAnySetter註釋的方法,如下:

@JsonAnySetter 
public void set(String key, String value) { 
    params.put(key, value); 
} 

此方法作爲在JSON內容發現所有無法識別的特性撤退處理


使用上面提到的方法,確保params場正​​在初始化:

private Map<String, String> params = new HashMap<String, String>(); 

所以,你PlayerRequest類將是這樣的:

public class PlayerRequest { 

    private String language; 
    private String playerId; 
    private Map<String, String> params = new HashMap<String, String>(); 

    public PlayerRequest() { } 

    public String getLanguage() { 
     return language; 
    } 

    public void setLanguage(String language) { 
     this.language = language; 
    } 

    public String getPlayerId() { 
     return playerId; 
    } 

    public void setPlayerId(String playerId) { 
     this.playerId = playerId; 
    } 

    public Map<String, String> getParams() { 
     return params; 
    } 

    public void setParams(Map<String, String> params) { 
     this.params = params; 
    } 

    @JsonAnySetter 
    public void set(String key, String value) { 
     params.put(key, value); 
    } 
} 
+0

我試過了,沒有工作 – mickygo

+0

@mickygo查看我的更新回答。 –

+0

是的。我初始化它在所述一組方法: @JsonAnySetter \t公共無效集(String鍵,字符串值){ \t \t如果(PARAMS == NULL){ \t \t \t PARAMS =新的HashMap <字符串,字符串>() ; \t \t} \t \t params.put(key,value); \t} – mickygo