JAXB 或 Jackson 用于 xml 解组



接收XML响应时,有两种主要解决方案将xml解码为DTO对象。为什么人们更喜欢JAXB而不是jackson,或者相反?

JAXB:

Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
XMLStreamReader reader = XMLInputFactory.newInstance().createXMLStreamReader(new StringReader(xmlString));
unmarshaller.unmarshal(reader, DtoObject.class);

杰克逊:

mapper = new ObjectMapper() / new XmlMapper();
mapper.readValue(xmlString, DtoObjectc.class);

在我看来,我将使用 JAXB,原因如下。

  1. 它非常成熟,是JDK的一部分。
  2. 我不需要第三方附加库即可使用
  3. 与JAXB相比,Jackson2 XML转换是新的,JAXB在行业中已经存在了很长时间,并且有很多社区支持它。

然而,我并不是说什么是好是坏。同样,这是开发人员的选择。

从功能上看,没有区别。一切都是为了java对象<-->xml对象。但是,存在性能差异。我已经在JAXB和推土机测绘机之间用Jmeter进行了测试。结果显示JAXB的效率约为50%。我不知道杰克逊呢。但从我的个人经验来看。我更喜欢JAXB。供您参考。

XmlMapper需要较少的配置,在像PascalCase映射这样的边缘情况下,当jaxb2不工作时,它可以工作。

<dependency>
    <groupId>com.fasterxml.jackson.dataformat</groupId>
    <artifactId>jackson-dataformat-xml</artifactId>
    <version>2.9.8</version>
</dependency>

使用与com.fasterxml的其他内容相同的版本。

最新更新