2

有没有办法指示 Jackson 2 ObjectMapper 使用自定义 Classloader 反序列化 JSON 字符串?

4

3 回答 3

1

这是解决方案:

ClassLoader myClassLoader = ...        

ObjectMapper om = new ObjectMapper();
TypeFactory tf = TypeFactory.defaultInstance()
                            .withClassLoader(myClassLoader);
om.setTypeFactory(tf);
于 2016-07-29T10:33:45.233 回答
0

查看 Jackson Wiki for Modules,杰克逊模块可用于创建自定义序列化/反序列化。虽然 wiki 谈论他们可以做什么

添加自定义序列化器和反序列化器

添加混合注释

覆盖或添加 AnnotationIntrospector

访问 SerializationConfig 和 DeserializationConfig 设置。

它的细节很简单,只是举一个非常基本的例子。Module JavaDoc也很注重细节。幸运的是,该 wiki 还在GitHub 上提供了现有 Jackson 模块的列表,如果您需要从头开始创建自己的模块,作为示例会更有帮助。

于 2012-06-01T14:44:47.747 回答
0

为了保留现有的TypeMapper,您可能想要做这样的事情(这是 Scala,但在 Java 中也可以使用相同的模式),您可以在其中调整当前的类型工厂。

  def updateClassLoader(cl: ClassLoader): Unit = {
    objectMapper.setTypeFactory(objectMapper.getTypeFactory.withClassLoader(cl))
  }

这将从可能的先前配置调用中保留缓存的类型数据,如下所示:

mapper.registerModule(new Jdk8Module)
      .registerModule(new JavaTimeModule)
      .registerModule(new DefaultScalaModule)
于 2019-04-17T21:07:58.807 回答