我正在使用JsonTypeInfo来处理我的系统读入的一些JSON对象的多态性。系统还将这些对象提供给其他服务。在某些情况下,我想要详细的对象,包括类型信息,在其他情况下,我想要准确的对象的简单视图。
我正在尝试设置JsonViews来处理这个问题,但无论我做什么,它都包含序列化JSON中的类型信息。我尝试了一些不同的方法,但下面是我想要做的一个例子。
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "type")
@JsonSubTypes({
@JsonSubTypes.Type(value = PlayerSpawnedEvent.class, name = "PlayerSpawnedEvent"),
@JsonSubTypes.Type(value = PlayerStateChangedEvent.class, name = "EntityStateChangeEvent")
})
public abstract class AbstractEvent
{
@JsonView(Views.Detailed.class)
public String type;
@JsonView(Views.Detailed.class)
public String id;
@JsonView(Views.Minimal.class)
public long time;
}
答案 0 :(得分:1)
事实证明,当我之前尝试使用JsonTypeInfo.As.EXISTING_PROPERTY时,我无法定义类型。解决了它并在每个子类中定义了类型。
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.EXISTING_PROPERTY, property = "type", visible = true)
@JsonSubTypes({
@JsonSubTypes.Type(value = PlayerSpawnedEvent.class, name = "PlayerSpawnedEvent"),
@JsonSubTypes.Type(value = PlayerStateChangedEvent.class, name = "PlayerStateChangedEvent")
})
public abstract class AbstractEvent
{
@JsonView(Views.Detailed.class)
public String type;
@JsonView(Views.Detailed.class)
public String id;
@JsonView(Views.Minimal.class)
public long time;
}
public class PlayerSpawnedEvent
{
public PlayerSpawnedEvent() { type = "PlayerSpawnedEvent"; }
}
public class PlayerStateChangedEvent
{
public PlayerStateChangedEvent() { type = "PlayerStateChangedEvent"; }
}