有没有一种方法可以从Jackson ObjectMapper中注销模块



我正在将KeyDeseriliser注册到ObjectMapper。在阅读JSON之后,我想注销此模块。因为我的ObjectMapper是静态的,我不想在任何其他地方使用这个模块。

SimpleModule module = new SimpleModule("EnhancedDatesModule", new Version(0, 1, 0, "test", "Test-id",
"testest"));
module.addKeyDeserializer(EncounterCURN.class, new MapKeyDeseriliser());
objectMapper.registerModule(module);
Map<EncounterCURN, Collection<EncounterTodo>> encounterTodosByEncounter = mapReader.readValue(nodes.get("todos"));

不,你不能这样做。您应该创建另一个ObjectMapper并使用它。

顺便说一句,static字段这不是用Java编程的好习惯。您应该避免此类对象是static的情况。

根据文档,模块有一个setSerializers

/**
 * Resets all currently configured serializers.
 */
public void setSerializers(SimpleSerializers s) {
    _serializers = s;
}

因此,您可以使用一个新的空SimpleSerializers对象来调用setter。

免责声明:从线程安全的角度来看,我不能100%确定这将如何锻炼。