我是一名JaxB菜鸟,但我已经学会了很多关于如何配置杰克逊的知识。我正在为某些域对象类添加XML序列化/反序列化支持。我有一个类型序列化/反序列化的类型取决于必须指定的上下文。
我能够通过编写HandlerInstantiator
的自定义实现在杰克逊中完成此任务。自定义实现将上下文作为构造函数参数。当这些上下文敏感对象需要序列化程序或反序列化程序时,提供它的方法会使用构造处理程序的上下文对其进行实例化。我为我的库编写了一个服务类,用户可以使用它来请求为所需的上下文配置的对象映射器。
通过这种方式,我仍然可以在受此上下文敏感行为影响的字段上使用@JsonSerialize
和@JsonDeserialize
注释,即使我需要使用非默认构造函数实例化这些类
那么,有什么类似于我在JaxB中可以做的事情,所以我可以编写泛型XmlAdapters
,它将上下文作为其构造函数的参数?默认情况下,JaxB和Jackson一样,需要适配器的无参数构造函数。我希望有一些类似于杰克逊InstantiatorHandler
的东西,我可以覆盖,然后以某种方式配置JaxB以类似的方式使用。
答案 0 :(得分:0)
您可以将任何XmlAdapter类绑定到具体实例。 JAXB Marshaller / Unmarshaller接口都提供方法setAdapter
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
unmarshaller.setAdapter(new MyClassXmlAdapter(...));
现在所有使用@XmlJavaTypeAdapter注释的字段/类型都将使用给定的实例进行调整