我正在使用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;
}
最佳答案
原来,当我尝试使用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"; }
}
关于java - jackson JsonView和JSonTypeInfo,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45494420/