在客户端上,我有一个Javascript应用程序对实体进行操作,其中一些引用了包装对象,它包含服务器端实例的唯一键 - 基本上是某种引用。有些按原样处理,所有实体字段都存在。如何将不同的对象表示反序列化为POJO?
当我通过修改发送实体并将其保存在服务器上时,本身实体的某些字段是引用,有些字段是完整对象。
例如,说我有车,CarModel和车库,传入的JSON可以是这样的:
{
addedItems: [{
"@class": "mydoamin.Car",
belongsTo: {
"key": "Unique_Garage_Key"
},
carModel: {
name: "New Car Model",
wheelSize: 14,
doors: 5
}
},{
"@class": "mydomain.Car",
belongsTo: {
"name": "New Garage"
},
carModel: {
key: "Unique_Key_Of_Existing_Car_Model"
}
}]
}
对于这个服务器上的一部分工作,我需要一个灵活的解串器,它可以反序列化两格式化为相应的域POJO。
从我从杰克逊文档中得到的信息,我开始了一个反序列化器,但是我没有找到正确写入它的线索。我在解串器中得到的是JsonParser和DeserializationContext。我认为可以通过解析流两次,首先作为包装器对象来实现,如果失败,请尝试将其读为域对象。 不幸的是,我不能看到这与JsonParser可能。
所以基本上我的方法来解串器是:
Car car;
try {
Wrapper carRef = jp.readValueAs(Wrapper.class);
car = wrapper.unwrap(carRef);
} catch (Exception e) {
// rewind the stream somehow...
car = jp.readValueAs(Car.class);
}
可有人评论这是可能与JsonParser,并就如何实现这一目标的反序列化的情况下,也许更好的想法?
谢谢