【问题标题】:Is there an equivalent of the Jackson HandlerInstantiator in JaxB?JaxB 中是否有相当于 Jackson HandlerInstantiator 的东西?
【发布时间】:2016-06-03 01:30:34
【问题描述】:

我是 JaxB 菜鸟,但我学到了很多关于如何配置 Jackson 的知识。我正在为某些域对象类添加 XML 序列化/反序列化支持。我有一个类类型,它根据必须指定的上下文进行不同的序列化/反序列化。

我可以在 Jackson 中通过编写 HandlerInstantiator 的自定义实现来实现这一点。自定义实现将上下文作为构造函数参数。当这些上下文敏感对象需要序列化器或反序列化器时,提供它的方法会使用构造处理程序的上下文来实例化它。我为我的库编写了一个服务类,用户可以使用它来请求为所需上下文配置的对象映射器。

通过这种方式,即使我需要使用非默认构造函数实例化这些类,我仍然可以在受此上下文相关行为影响的字段上使用 @JsonSerialize@JsonDeserialize 注释。

那么,我可以在 JaxB 中做一些类似的事情吗,这样我就可以编写通用的XmlAdapters,它将上下文作为其构造函数的参数?默认情况下,JaxB 和 Jackson 一样,需要适配器的无参数构造函数。我希望有类似于 Jackson InstantiatorHandler 的东西,我可以覆盖它,然后以某种方式配置 JaxB 以类似的方式使用。

【问题讨论】:

    标签: java xml jaxb jackson


    【解决方案1】:

    您可以将任何 XmlAdapter 类绑定到具体实例。 JAXB Marshaller/Unmarshaller 接口都提供方法setAdapter

    Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
    unmarshaller.setAdapter(new MyClassXmlAdapter(...));
    

    现在所有使用 @XmlJavaTypeAdapter 注释的字段/类型都将适应给定的实例

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-11-18
      • 1970-01-01
      • 2011-06-19
      • 1970-01-01
      • 2014-05-27
      • 2011-04-20
      • 2019-12-24
      相关资源
      最近更新 更多