Jackson 自定义 Map ValueInstantiator

luk*_*evo 1 jackson

默认情况下,Jackson 会java.util.LinkedHashMap在反序列化任何Map类型时创建实例。如何自定义让 Jackson 创建不同的 Map 实现,但仍继续使用其默认 Map 反序列化器?

Sta*_*Man 5

有多种方法可以做到这一点,但最简单的方法可能只是指定应该使用哪个类作为抽象类的具体实现。所以像:

SimpleModule myModule = new SimpleModule(...);
myModule.addAbstractTypeMapping(Map.class, SomeOtherMap.class);
objectMapper.registerModule(myModule);
Run Code Online (Sandbox Code Playgroud)

这既适用于通用抽象类型(List, Collection, Map)的默认设置,也适用于指定自定义接口和抽象类的具体实现。