当前位置: 首页 > 知识库问答 >
问题:

有没有办法从杰克逊对象映射器注销模块?

岳劲
2023-03-14

我正在将< code > keydeselliser 注册到< code>ObjectMapper。读完< code>JSON后,我想注销这个模块。因为我的< code>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"));

共有2个答案

焦学海
2023-03-14

该模块有一个< code > set serializer ,根据文档:

java prettyprint-override">/**
 * Resets all currently configured serializers.
 */
public void setSerializers(SimpleSerializers s) {
    _serializers = s;
}

因此,您可以用一个新的空<code>SimpleSerializers</code>对象调用setter。

声明:从线程安全的角度来看,我不是100%确定这将如何解决。

徐博雅
2023-03-14

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

顺便说一下,< code>static字段这不是Java编程的好习惯。您应该避免这种情况,其中这类对象是< code >静态的。

 类似资料:
  • 我有一个包含地图(非字符串键)和其他一些字段的类。 我想使用 Jackson 序列化和反序列化这个类。我看到了一种不同的方法,并决定尝试使用jackson模块。 我关注了这篇文章,并扩展了JsonDeserializer和JsonSerializer。问题是这些类应该是类型化的,所以看起来应该是这样的 KeySerializer也是如此。 然后添加到模块: 但这显然是错误的,因为我得到了一个例外:

  • 问题内容: 我试图通过使用以下(简化)代码从序列化中筛选出某些字段: 我们使用的我一直期望创建的序列化Json字符串仅包含,但是我得到了。 如何创建一个尊重指定过滤器的临时编写器(在我的情况下,无法重新配置ObjectMapper)。 注意:由于我的应用程序中的使用场景,我只能接受不使用Jackson批注的答案。 问题答案: 通常,您可以对您的类进行注释以应用过滤器: 您已指定不能在类上使用批注。

  • 问题内容: 我有一个模型,当从前端发送请求时,我可以在控制器中使用@Valid进行验证: 但是现在,我还使用不含控制器的Jackson的ObjectMapper创建了一个对象。有没有一种方法可以在ObjectMapper中注册此验证,还是应该只检查setter中的变量? 问题答案: 反序列化后,您可以扩展和验证对象。要注册此bean使用。 具有验证的简单bean反序列化器: 我们可以如下使用它:

  • 问题内容: 我有以下课程- 我正在使用objectMapper.valueToTree(sections)将其转换为JsonNode。但是,当我打印相同的内容时,我仅从Entity类中看到id和name字段,而从Images列表中看不到任何内容。我是否需要添加任何种类的特殊逻辑或注释以确保同时打印列表。 以下是主要课程- 问题答案: 您需要为Entity#images添加getter和setter

  • 问题内容: 我可以有条件地使用@JsonUnwrapped吗?我不想在序列化过程中使用它,但想在反序列化对象时使用它。 一种实现方法是创建两个不同的类或创建一个子类,该子类仅覆盖需要在序列化和反序列化时表现不同的属性。这听起来不对。还有其他替代方法或Jackson的解决方法吗? 问题答案: 您可以使用MixIn功能。使用此要素类与注释分离。您可以使用在运行时中添加必要的注释。请参见以下示例: 上面

  • 问题内容: 我有这个回应: 然后,我要基于 exercise_type 属性实例化不同的对象实例(的子类),因此我在以下位置创建此混合: 所以我创建如下 我的测试: 问题在于,由于某种原因,用作属性on 的 exercise_type 属性被映射为 null 。知道我该如何解决吗? 问题答案: 最后,我在API文档中找到了解决方案 关于类型标识符可见性的注意事项:默认情况下,类型标识符的反序列化(