首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用Java Jackson如何将包含映射列表的json映射到java pojo

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

Stack Overflow用户
提问于 2018-07-27 19:06:19
回答 2查看 1.2K关注 0票数 2

我已经在这个问题上挣扎了几天了。

假设我的json响应是:

代码语言:javascript
复制
{
"ignoreMe": -1,
"ignoreMeToo": "Not interested in this",
"valuableInfo": [{
        "Info1": {
            "key1": 0.0537,
            "key2": 0.0759
        }
    }, {
        "Info2": {
            "key2": 0.0444,
            "key4": 0.2345
        }
    }
]}

从这个响应中,我希望能够映射到我的自定义pojo对象,它应该看起来像这样;

代码语言:javascript
复制
@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;
    }
}

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

代码语言:javascript
复制
mapper.readValue(jsonResponse, ResponseDTO.class)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-07-27 19:11:19

我猜你的错误是,杰克逊无法为ResponseDTO找到合适的无参数构造器(因为没有)。要克服这一点,您可以使用@JsonCreator@JsonProperty注释。请参见更改后的构造函数:

代码语言:javascript
复制
@JsonCreator
public ResponseDTO(@JsonProperty("valuableInfo") List<Map<String, Double>> valuableInfo){
    this.valuableInfo = valuableInfo;
}

其余的代码可以保持不变。

这只是告诉jackson它应该将名为"valuableInfo"的属性注入到该构造函数中。

票数 5
EN

Stack Overflow用户

发布于 2018-07-27 20:41:12

仔细观察你的json。这里的valuableInfo包含对象的列表。并且每个对象都包含Map<字符串,object >。然后你的类需要像这样:

代码语言:javascript
复制
@JsonIgnoreProperties(ignoreUnknown = true)
public class ResponseDTO{
private List<Map<String, Map<String, Double>>> valueableInfo;

@JsonCreator
public ResponseDTO(@JsonProperty("valuableInfo") List<Map<String, Map<String, Double>>> valuableInfo){
    this.valueableInfo = valuableInfo;
}

public List<Map<String, Map<String, Double>>> getValueableInfo() {
    return valueableInfo;
}

public void setValueableInfo(List<Map<String, Map<String, Double>>> valueableInfo) {
    this.valueableInfo = valueableInfo;
}
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51556672

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档