有没有办法指示Jackson 2 ObjectMapper使用自定义类加载器来反序列化JSON字符串?
答案 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)