jackson json 嵌套对象_java – Jackson – 反序列化嵌套的JSON

我有一个

JSON字符串,其格式如下:

{

"response": {

"execution_status": "ready",

"report": {

"cache_hit": true,

"created_on": "2013-07-29 08:42:42",

"fact_cache_error": null,

"fact_cache_hit": true,

"header_info": null,

"name": null,

"report_size": "5871",

"row_count": "33",

"url": "report-download?id=278641c223bc4e4d63df9e83d8fcb4e6"

},

"status": "OK"

}

}

JSON的响应部分对于一堆响应类型是常见的.此JSON的报告部分仅适用于此响应.所以我创建了一个Response类,如下所示,带有getter和setter(为简洁起见,这里没有包括getter和setter):

@JsonRootName(value = "response")

public class Response implements Serializable {

private static final long serialVersionUID = -2597493920293381637L;

@JsonProperty(value = "error")

private String error;

@JsonProperty(value = "error_code")

private String errorCode;

@JsonProperty(value = "error_id")

private String errorId;

@JsonProperty(value = "error_description")

private String errorDescription;

@JsonProperty(value = "method")

private String method;

@JsonProperty(value = "service")

private String service;

@JsonProperty(value = "status")

private String status;

@JsonProperty(value = "execution_status")

private String executionStatus;

}

然后,我创建了一个Report类,其中包含report元素中的字段,如下所示. ReportResponse类将从Response类扩展(为简洁起见,不包括getter和setter):

public class ReportResponse extends Response {

private static final long serialVersionUID = 4950819240030644407L;

@JsonProperty(value = "cache_hit")

private Boolean cacheHit;

@JsonProperty(value = "created_on")

private Timestamp createdOn;

@JsonProperty(value = "fact_cache_error")

private String factCacheError;

@JsonProperty(value = "fact_cache_hit")

private Boolean factCacheHit;

@JsonProperty(value = "header_info")

private String headerInfo;

@JsonProperty(value = "json_request")

private String jsonRequest;

@JsonProperty(value = "name")

private String name;

@JsonProperty(value = "report_size")

private Integer reportSize;

@JsonProperty(value = "row_count")

private Integer rowCount;

@JsonProperty(value = "url")

private String url;

}

现在当我使用ObjectMapper映射到ReportResponse对象时,我收到以下错误:

String jsonString = "{\"response\": {\"execution_status\": \"ready\", \"report\": {\"cache_hit\": true, \"created_on\": \"2013-07-29 09:53:44\", \"fact_cache_error\": null, \"fact_cache_hit\": false, \"header_info\": null, \"name\": null, \"report_size\": \"5871\", \"row_count\": \"33\", \"url\": \"report-download?id=2ff62c07fc3653b68f2073e7c1aa0517\"}, \"status\": \"OK\"}}";

ObjectMapper mapper = new ObjectMapper();

ReportResponse reportResponse = mapper.readValue(jsonString, ReportResponse.class);

Caused by: com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "report"

我知道我可以创建一个单独的Report类,然后使用@JsonProperty anotation将其嵌入到ReportResponse中.有没有办法可以避免这种情况,并使用注释标记ReportResponse类,该注释会将其映射到JSON中的“report”元素?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值