Jackson 完全忽略 Jaxb XML 相关的注解
Jackson completely ignore Jaxb XML related annotations
想象一下,当您在 Java 中有一个模型时,您必须将其序列化为 XML 和 CSV。
我将 Jaxb Marshaller
用于 XML,将 Jackson 的 CsvMapper
(ObjectMapper
) 用于 CSV。
由于格式略有不同,我希望 Jackson 的 CsvMapper
忽略 Jaxb
相关注释,如 @XmlType
或 @XmlElement
。因为 Jackson 也得到 information/considers xml 注释,这会导致错误的结果。
我该怎么做?
这可能是您创建新的方式 CsvMapper
:
CsvMapper csvMapper = new CsvMapper();
csvMapper.findAndRegisterModules();
findAndRegisterModules
方法调用 findModules
文档说:
Method for locating available methods, using JDK ServiceLoader facility, along with module-provided SPI.
所以,可能您在 class 路径上有 jackson-module-jaxb-annotations 模块,这就是 CsvMapper
识别 JAXB
注释的原因。
要修复它,您需要删除此方法的调用 findAndRegisterModules
并仅注册您需要的这些模块。
想象一下,当您在 Java 中有一个模型时,您必须将其序列化为 XML 和 CSV。
我将 Jaxb Marshaller
用于 XML,将 Jackson 的 CsvMapper
(ObjectMapper
) 用于 CSV。
由于格式略有不同,我希望 Jackson 的 CsvMapper
忽略 Jaxb
相关注释,如 @XmlType
或 @XmlElement
。因为 Jackson 也得到 information/considers xml 注释,这会导致错误的结果。
我该怎么做?
这可能是您创建新的方式 CsvMapper
:
CsvMapper csvMapper = new CsvMapper();
csvMapper.findAndRegisterModules();
findAndRegisterModules
方法调用 findModules
文档说:
Method for locating available methods, using JDK ServiceLoader facility, along with module-provided SPI.
所以,可能您在 class 路径上有 jackson-module-jaxb-annotations 模块,这就是 CsvMapper
识别 JAXB
注释的原因。
要修复它,您需要删除此方法的调用 findAndRegisterModules
并仅注册您需要的这些模块。