2016-05-25 7 views
0

Ich habe einen REST-Web-Service mit Jersey 1.17.1 und Jackson 1.9.2.HashMap ist leer nach der Deserialisierung mit Jersey und Jackson

Die API sieht wie folgt aus:

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

Wenn dieser Dienst von einer anderen Komponente genannt wird, die params Karte leer erhalten:

PlayerRequest [language=null, playerId=100036343, params={}] 

Original-Anfrage von einer anderen Komponente:

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

Warum ist die HashMap nach der Deserialisierung leer?

Antwort

0

durch die Implementierung und Adapter Fest (javax.xml.bind.annotation.adapters.XmlAdapter) und die Karte in api mit @XmlJavaTypeAdapter

annotiert
0

In Ihrer PlayerRequest Klasse, erstellen Sie eine Methode mit @JsonAnySetter kommentiert, wie folgend:

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

Diese Methode funktioniert als Ersatzvorrichtung für alle unerkannt im JSON-Inhalt gefunden Eigenschaften.


Um den oben genannten Ansatz zu verwenden, muss das params Feld initialisiert wird:

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

Also, Ihre PlayerRequest Klasse aussehen würde:

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

Ich habe es versucht und nicht funktioniert – mickygo

+0

@mickygo Siehe meine aktualisierte Antwort. –

+0

Ja. Ich initialisiert es in der Set-Methode: @JsonAnySetter \t public void set (String key, String value) { \t \t if (params == null) { \t \t \t params = new HashMap () ; \t \t} \t \t params.put (Schlüssel, Wert); \t} – mickygo

Verwandte Themen