如何让杰克逊在反序列化过程中将所有类似地图的节点强制转换为我的自定义类?

我有一个实现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必须具有零参数构造函数.

点赞