我正在尝试从JSON反序列化POJO对象(NoteObj
)。 POJO对象扩展了我拥有自定义反序列化程序的Item
(抽象对象)。此自定义反序列化器可确保如果需要IItem
类作为POJO,则将返回特定的类(Edge或Vertex),而不是抽象类。
但是,当我想使用它返回NoteObj
实例时。
但是,如果我用NoteObj.class
调用解串器,则总是得到ArrayList<Vertex>
,因为使用了NoteObj extends Item
和我的自定义ItemDeserializer
而不是某些默认的Jackson解串器。
IItem接口类:
@JsonDeserialize(
using = ItemDeserializer.class
)
public interface IItem {
...
}
抽象类项
@JsonInclude(Include.NON_EMPTY)
@JsonDeserialize(
using = ItemDeserializer.class
)
public abstract class Item implements IItem, Serializable {
...
}
我不需要使用ItemDeserializer的POJO对象,而是标准的Jackson序列化器,因此我可以使用NoteObj
public class NoteObj extends Item implements IItem {
...
}
ItemDeserialzier返回的另一个类(Edge相同):
@JsonDeserialize(using = JsonDeserializer.None.class)
public class Vertex extends Item implements IVertex, Serializable {
...
}
ItemDeserializer的代码为:
public class ItemDeserializer extends JsonDeserializer<IItem> {
protected ItemDeserializer() {
}
public IItem deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException {
TreeNode node = jsonParser.readValueAsTree();
if (node.get("_from") != null) {
return (Edge)jsonParser.getCodec().treeToValue(node, Edge.class);
} else {
return (Vertex)jsonParser.getCodec().treeToValue(node, Vertex.class);
}
}
}
我已经尝试在NoteObj类定义中将@JsoNDeserialize与JsonNodeDeserializer.class一起使用,但这不会返回POJO,而是LinkedHashList。我尝试使用None.class,但这仍然用于ItemDeserializer。
我有个想法,我将修改ItemDeserializer以返回请求的POJO(例如,不仅是Edge,Vertex,而且是通用类,例如NoteObj)。但是我不知道如何确定要返回的泛型类。