【发布时间】:2016-08-16 12:13:14
【问题描述】:
详情---
我的一个用于 api 响应的 POJO SomeResponseObject 具有属性
@JsonProperty("s_summary")
private Map<String, SummaryObject> summary
还有更多的属性。这些在json 中总结如下:
{
"s_summary": {
"rewardSubscription": {
"accountId": "XYZ",
"startDate": "2015-12-29T19:00:00+05:30",
"endDate": "2017-06-21T00:00:00+05:30",
"isActive": true,
"entityId": "ID123",
"status": "ACTIVE"
}
}
}
这个 POJO(json) 被我们的服务进一步修改以返回一个响应:
{
"rewardSubscription": {
"accountId": "XYZ",
"startDate": "2015-12-29T19:00:00+05:30",
"endDate": "2017-06-21T00:00:00+05:30",
"isActive": true,
"entityId": "ID123",
"status": "ACTIVE"
}
}
缩小范围 ---
现在,当我们针对此 API 调用编写测试时。我们最终无法将响应映射到任何特定的 POJO(java 响应类)。 测试代码-
JSONObject responseObject = new JSONObject(responseFromService.getResponseBody())
.getJSONObject("RESPONSE");
ObjectMapper objectMapper = new ObjectMapper();
SomeResponseObject summaryResponse = objectMapper.getObjectMapper()
.readValue(responseObject.toString(), SomeResponseObject.class); // And this wouldn't work.
问题--
有什么方法可以转换当前的 API 响应或以某种方式包装它以映射到实际的 POJO(SomeResponseObject.class)?
提前致谢。
【问题讨论】:
-
根据我的理解,您的问题是将 json 数据解析为 dto 对象?
-
如果您将 json 格式的客户端响应解析为 pojo 类,则有很多选择,其中之一是 roo..它创建并使用其 api 将其转换为:dto.toJson( ); //aspect内部代码:return new JSONSerializer().exclude("*.class").serialize(this);
-
还有许多第三方库可用,例如:jackson
org.codehaus.jackson jackson-mapper-asl >跨度> -
howtodoinjava.com/jackson/… 是教程之一...我喜欢 spring roo 亲自为我做的东西为实体/pojo 只需添加特定的注释'@RooJson'
-
@xyz - 不是我想要的。我们一直在使用映射器。问题是将修剪后的响应映射到定义的 POJO 或包装响应以匹配 POJO。
标签: java json pojo objectmapper