如何让杰克逊在反序列化期间将所有类似地图的节点投射到我的自定义class?
How to make Jackson cast all map-like nodes to my custom class during deserialization?
我有一个 class 实现 Map<String, Object>
接口:
public class TypedObject implements Map<String, Object>, Serializable {...}
TypedObject
的一个实例可能包含另一个 TypedObject
的实例作为值等等。
默认情况下,Jackson 的 ObjectMapper
将任何类似地图的记录反序列化为 LinkedHashMap
。我希望它将任何子地图反序列化为 TypedObject
.
我知道我可以实现自己的反序列化器,但在我看来还有更简单的方法。
那么我如何告知 ObjectMapper
我想要什么?
示例:
{"child":{"name":"son","child":{"name":"grandson"}}}
应该反序列化为 TypedObject
,其中包含另一个 TypedObject
值,该值还包含一个 TypedObject
值。
一种方法是指定从抽象类型 Map
到 TypedObject
的映射。这可以通过构造 SimpleModule
、调用其 "addAbstractTypeMapping(...)" 方法、使用 ObjectMapper
.
注册模块来完成。
为此,TypedObject
必须有可用的零参数构造函数。
我有一个 class 实现 Map<String, Object>
接口:
public class TypedObject implements Map<String, Object>, Serializable {...}
TypedObject
的一个实例可能包含另一个 TypedObject
的实例作为值等等。
默认情况下,Jackson 的 ObjectMapper
将任何类似地图的记录反序列化为 LinkedHashMap
。我希望它将任何子地图反序列化为 TypedObject
.
我知道我可以实现自己的反序列化器,但在我看来还有更简单的方法。
那么我如何告知 ObjectMapper
我想要什么?
示例:
{"child":{"name":"son","child":{"name":"grandson"}}}
应该反序列化为 TypedObject
,其中包含另一个 TypedObject
值,该值还包含一个 TypedObject
值。
一种方法是指定从抽象类型 Map
到 TypedObject
的映射。这可以通过构造 SimpleModule
、调用其 "addAbstractTypeMapping(...)" 方法、使用 ObjectMapper
.
为此,TypedObject
必须有可用的零参数构造函数。