我一直在利用Jackson JSON解析器来绘制我的对象。在测试api时,我遇到了创建/更新包含嵌套对象的对象的问题。
创建和更新主对象
Airplane plane = airplanes.get(planeId);
if(plane == null){
plane = mapper.readValue(jsonNode, Airplane.class)
}else{
mapper.readerForUpdating(plane).readValue(jsonNode);
}
对象示例:
public class Airplane {
private static final String TAG = "Airplane Model";
@JsonProperty("id")
private String mId;
@JsonProperty("company")
private String mCompany;
@JsonProperty("pilot")
private Pilot mPilot;
@JsonProperty("passenger")
private Passenger mPassenger;
public Airplane() {
}
}
public class Pilot {
private static final String TAG = "Pilot Model";
@JsonProperty("id")
private String mId;
@JsonProperty("name")
private String mName;
public Pilot() {
//keeps getting called on airplane reader update
}
}
所有内容都正确映射,但问题是每次更新飞机对象时,它都会在Pilot()构造函数中创建一个新的“Pilot”嵌套对象。这成为一个更大的问题,因为飞机模型正在以较小的时间间隔由Web套接字更新(不必要的对象实例化)。另外,我在Pilot对象中设置了非映射字段,这些字段由于每次更新时都会创建一个新的Pilot对象而丢失。
使用嵌套对象通过Jackson更新对象的正确方法是什么?我是否缺少任何注释以防止重复实例化我的嵌套对象。