如何让杰克逊在反序列化期间将所有类似地图的节点投射到我的自定义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 值。

一种方法是指定从抽象类型 MapTypedObject 的映射。这可以通过构造 SimpleModule、调用其 "addAbstractTypeMapping(...)" 方法、使用 ObjectMapper.

注册模块来完成。

为此,TypedObject 必须有可用的零参数构造函数。