我已经在这个问题上挣扎了几天了。
假设我的json响应是:
{
"ignoreMe": -1,
"ignoreMeToo": "Not interested in this",
"valuableInfo": [{
"Info1": {
"key1": 0.0537,
"key2": 0.0759
}
}, {
"Info2": {
"key2": 0.0444,
"key4": 0.2345
}
}
]}
从这个响应中,我希望能够映射到我的自定义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;
}
}
如何设置我的映射器,以执行此转换使用just;
mapper.readValue(jsonResponse, ResponseDTO.class)
发布于 2018-07-27 19:11:19
我猜你的错误是,杰克逊无法为ResponseDTO
找到合适的无参数构造器(因为没有)。要克服这一点,您可以使用@JsonCreator
和@JsonProperty
注释。请参见更改后的构造函数:
@JsonCreator
public ResponseDTO(@JsonProperty("valuableInfo") List<Map<String, Double>> valuableInfo){
this.valuableInfo = valuableInfo;
}
其余的代码可以保持不变。
这只是告诉jackson它应该将名为"valuableInfo"
的属性注入到该构造函数中。
发布于 2018-07-27 20:41:12
仔细观察你的json。这里的valuableInfo
包含对象的列表。并且每个对象都包含Map<字符串,object >。然后你的类需要像这样:
@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;
}
}
https://stackoverflow.com/questions/51556672
复制相似问题