如何将自定义类加载器添加到ObjectMapper?

时间:2012-06-01 14:19:55

标签: json classloader jackson

有没有办法指示Jackson 2 ObjectMapper使用自定义类加载器来反序列化JSON字符串?

3 个答案:

答案 0 :(得分:1)

以下是解决方案:

ClassLoader myClassLoader = ...        

ObjectMapper om = new ObjectMapper();
TypeFactory tf = TypeFactory.defaultInstance()
                            .withClassLoader(myClassLoader);
om.setTypeFactory(tf);

答案 1 :(得分:0)

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

  

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

     

添加混合注释

     

覆盖或添加AnnotationIntrospector

     

访问SerializationConfig和DeserializationConfig设置。

细节非常清楚,只是给出了一个非常基本的例子。 Module JavaDoc对细节也很清楚。幸运的是,wiki在GitHub上也有一个list of existing Jackson Modules,如果你需要从头开始创建自己的模块,这个例子会更有帮助。

答案 2 :(得分: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)