使用Java Jackson如何将包含映射列表的json映射到Java Pojo

waq*_*k87 2 java json jackson

我已经为这个问题苦苦挣扎了几天。

假设我的json响应是:

{
"ignoreMe": -1,
"ignoreMeToo": "Not interested in this",
"valuableInfo": [{
        "Info1": {
            "key1": 0.0537,
            "key2": 0.0759
        }
    }, {
        "Info2": {
            "key2": 0.0444,
            "key4": 0.2345
        }
    }
]}
Run Code Online (Sandbox Code Playgroud)

通过此响应,我希望能够映射到我的自定义pojo对象,该对象应如下所示;

@JsonIgnoreProperties(ignoreUnknown = true)
public class ResponseDTO{
   private List<Map<String, Double>> valuableInfo;

    public ResponseDTO(List<Map<String, Double>> valuableInfo) {
        this.valuableInfo = valuableInfo;
    }

    public List<Map<String, Double>> getvaluableInfo() {
        return valuableInfo;
    }

    public void setvaluableInfo(List<Map<String, Double>> valuableInfo) {
        this.valuableInfo = valuableInfo;
    }
}
Run Code Online (Sandbox Code Playgroud)

我如何设置我的映射器以使用Just执行此转换;

mapper.readValue(jsonResponse, ResponseDTO.class)
Run Code Online (Sandbox Code Playgroud)

Lin*_*ica 5

我猜你的错误是,Jackson找不到适合的无参数构造函数ResponseDTO(因为没有)。为了克服这个问题,您可以使用@JsonCreator@JsonProperty注释。查看更改后的构造函数:

@JsonCreator
public ResponseDTO(@JsonProperty("valuableInfo") List<Map<String, Double>> valuableInfo){
    this.valuableInfo = valuableInfo;
}
Run Code Online (Sandbox Code Playgroud)

其余代码可以保持不变。

这只是告诉杰克逊应该将带有名称的属性"valuableInfo"注入该构造函数。