我有以下json:
{
"id":"myid",
"fields":{
"body":"text body"
}
}
我想要反序列化到以下Java类中:
class TestItem {
private String id;
private String body;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getBody() {
return body;
}
public void setBody(String body) {
this.body = body;
}
使用Jackson Json解串器。这不起作用,因为body
字段嵌套在fields
内部类中。
我无法更改json结构,所以有任何方法(可能使用注释)我可以将body
字段从TestItem.fields.body
重新映射到TestItem.body
吗?
修改 我应该说这是一个更大的阶级等级的一部分,而练习的目的是减少它的深度。换句话说,我知道我可以声明一个内部类然后访问它,但这不是我想要实现的。
答案 0 :(得分:5)
有一些功能请求(如果已实现)将允许有限的单级包装/解包。但目前没有声明的方法来做到这一点。在某种程度上它是边缘情况,因为这与数据绑定相反(不幸的是我无法想到好的对象转换库,因此可能存在一些差距)。
通常做的是进行两阶段绑定:首先进入中间类型(通常是java.util.Map,或者是jackson JsonNode(树模型));修改那些,然后从这种类型转换为实际结果。例如:
JsonNode root = mapper.readTree(jsonSource);
// modify it appropriately (add, remove, move nodes)
MyBean bean = mapper.convertValue(root, MyBean.class);