我有一个json格式我试图为其创建一个jackson模型对象。 JSON格式是预定义的。部分格式如下:
entities: [
{
id: "",
name: "",
type: "",
...
}
{
id: "",
name: "",
type: "",
...
}
(etc etc)
]
这些'实体中的每一个都是'对象可能有不同的字段。例如,我可能有一个用户实体,一个帐户实体和一个提供者实体等.JSON是通用的,但在我的情况下,我建立一个特定的模板,我知道我将创建的每个实体的类型。我可以做这样的事情,它会起作用:
public class MyTemplate{
public Entity[] entities;
public MyTemplate(){
entities=new Entity[NUM_ENTITIES];
entities[ENTITY_LOC.User]=new UserEntity();
entities[ENTITY_LOC.Account]=new AccountEntity();
}
public void setUser(UserEntity user){
entities[ENTITY_LOC.User]=user;
}
}
这将正确地进行搜索,并且是一个非常丑陋的模型对象。我更喜欢的是这样的东西:
Public Class MyTemplate{
UserEntity user;
AccountEntity account;
public MyTemplate(){
user=new UserEntity();
account=new AccountEntity();
}
public void setUser(UserEntity user){
this.user=user;
}
}
问题是如何使上述对象序列化以符合预期的JSON格式,就好像每个命名字段只不过是一个名为entity的Collection中的通用对象?我知道我可以覆盖序列化解析器,但有一种方法可以简单地使用注释吗?
答案 0 :(得分:0)
除非您还编写自定义序列化程序,否则无法从第二个代码示例中的MyTemplate
结构序列化到您提供的JSON。但是,如果您使用MyTemplate
代替List
Entities
,那么就可以了:
public class MyTemplate {
List<Entity> entities;
// accessor, mutator
}
然后在你的问题中将序列化为JSON就好了。您仍然需要编写自定义反序列化器,并且您需要User
和Account
模型来扩展Entity
,然后放置确定所需的任何字段或逻辑该父类中的实体类型。
繁重的工作将在您的自定义解串器中。
Entity
上课:
public class Entity {
private String id;
private String type;
private String name;
// accessors, mutators
}
UserEntity
上课:
public class UserEntity extends Entity {
// UserEntity specific fields, logic
}