接收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,原因如下。
- 它非常成熟,是JDK的一部分。
- 我不需要第三方附加库即可使用
- 与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的其他内容相同的版本。