2016-05-25 9 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が空であるのはなぜですか?あなたのPlayerRequestクラスで

答えて

0

(javax.xml.bind.annotation.adapters.XmlAdapter)、APIのマップに@XmlJavaTypeAdapterというアノテーションを付けました

0

は、以下のように、@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公共ボイド集合(文字列キー、文字列値){ \t \t場合(paramsは== NULL){ \t \t \tのparams =新規HashMapの<文字列、文字列>():私は、設定された方法でそれを初期化; \t \t \t \t params.put(key、value); \t} – mickygo

関連する問題