【问题标题】:Jackson XML Serialization XMLElementRef nameJackson XML 序列化 XMLElementRef 名称
【发布时间】:2016-10-24 08:02:33
【问题描述】:

您好,我需要配置 fastxml.Jackson 序列化器以完全作为默认 JAXB 序列化器工作。

我有以下两个类的案例:

@XmlRootElement(name = "elA")
public class A {
    @XmlElementRef
    public Collection<B> getBs() {
        return this.bs;
    }
}

@XmlRootElement(name = "elB")
public class B {

}

我的对象映射器配置如下所示:

XmlMapper objectMapper = new XmlMapper();
JaxbAnnotationModule jaxbAnnotationModule = new JaxbAnnotationModule();
objectMapper.registerModule(jaxbAnnotationModule);

objectMapper.setDefaultUseWrapper(false);
objectMapper.configure(SerializationFeature.INDENT_OUTPUT,true);
objectMapper.configure(SerializationFeature.WRAP_ROOT_VALUE,false);
objectMapper.configure(SerializationFeature.CLOSE_CLOSEABLE, true);
objectMapper.setSerializationInclusion(Include.NON_ABSENT);

JaxbAnnotationIntrospector jaxbAnnotationIntrospector = new XmlJaxbAnnotationIntrospector(objectMapper.getTypeFactory());
objectMapper.setAnnotationIntrospector(jaxbAnnotationIntrospector);

我需要为 Jackson Serializer 配置 ObjectMapper 以生成以下 XML

<elA>
   <elB></elB>
   <elB></elB>
</elA>

但我明白了:

<A>
    <bs></bs>
    <bs></bs>
</A>

我应该如何配置 Object Mapper 以获得预期的结果?谢谢你。

我既不能更改类也不能更改注释,因为这是框架的一部分。

我能影响的只有 ObjectMapper 和 Jackson 配置。

【问题讨论】:

  • 我有一个包含 A 类和 B 类以及相应注释的框架。我既不能改变类也不能改变它们的注释。我需要配置 ObjectMapper 或 jackson 配置,它以与 JAXB 相同的方式识别注释。

标签: xml serialization jaxb jackson fasterxml


【解决方案1】:
@XmlRootElement(name = "elA")
public class ElA{
@XmlElementRef
public Collection<B> getElB() {
    return this.elb;
}
}

@XmlRootElement(name = "elB")
public class ElB{

}

【讨论】:

  • 我无法更改 A 类和 B 类的结构,因为它们是遗留代码的一部分。
  • 从@XmlRootElement(name = "elB") 更改为@XmlElement(name = "elB")
  • 谢谢,但我无法更改任何注释或类,因为它们属于旧代码。
  • 我唯一能改变的是 ObjectMapper 或 Jackson 配置。
  • 如果你不想改变一些东西,你怎么能期望结果会改变。
猜你喜欢
  • 2014-11-17
  • 2020-01-14
  • 2017-11-29
  • 2015-06-13
  • 2018-07-18
  • 1970-01-01
  • 2019-10-21
  • 2017-01-11
  • 2021-01-06
相关资源
最近更新 更多