HashMap 在与 Jersey 和 Jackson 反序列化后为空



我有一个使用 Jersey 1.17.1 和 Jackson 1.9.2 的 REST Web 服务。

该 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}]

为什么反序列化后哈希图为空?

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);
    }
}

通过实现和适配器(javax.xml.bind.annotation.adapters.XmlAdapter)修复,并使用@XmlJavaTypeAdapter在api中注释映射

最新更新