假设我有以下java类(为了简洁省略了getters& setters)。
public class AllMyEvents {
private List<SomeEvent<?>> eventList;
}
public class SomeEvent<T> {
private long time;
@JsonProperty("event_type")
private String eventType;
@JsonProperty("event_data")
private T eventData;
}
public class BigEvent {
private List<SomeEvent<LittleEvent>> subEvents;
}
public class LittleEvent {
private long data;
}
我打电话的时候:
ObjectMapper om = new ObjectMapper();
AllMyEvents events = om.readValue(IOUtils.toString(jsonData, "UTF-8"),AllMyEvents.class);
字段eventData
的类型为LinkedHashMap
。我想要的是这个字段类型由eventType
字符串指定。如果字符串为'big'
,我希望eventData
包含BigEvent
或LittleEvent
,如果字符串为'little'
。
是否可以使用Jackson注释执行此操作,还是需要编写自定义序列化器/反序列化器或其他方法?如果相关,我正在使用Jackson 1.9。
答案 0 :(得分:0)
Json Sub类型是你的答案。
@JsonTypeInfo(use=JsonTypeInfo.Id.NAME, include=JsonTypeInfo.As.PROPERTY, property="@class")
@JsonSubTypes({
@JsonSubTypes.Type(value=BigEvent.class, name="big"),
@JsonSubTypes.Type(value=LittleEvent.class, name="little")
})
public class SomeEvent<T> {
private long time;
@JsonProperty("event_type")
private String eventType;
...
另见:http://wiki.fasterxml.com/JacksonPolymorphicDeserialization