java - Jackson XmlMapper 在将 XML 写入文件时强制使用小写标记名称
问题描述
我在尝试使用 XmlMapper 从 POJO 写入 XML 文件时遇到问题。即使我使用的是 JacksonXmlProperty(localname ="UPPERCASE"),XmlMapper 也会强制使用小写标签名称
这是我映射的 POJOS 的代码
项目 XML:
data class ItemXML(
@JacksonXmlProperty(localName = "ITEMTYPE") val itemType: String,
@JacksonXmlProperty(localName = "ITEMID") val itemId: String,
@JacksonXmlProperty(localName = "QTY") val qty: Int,
@JacksonXmlProperty(localName = "COLOR") val color: Int,
@JacksonXmlProperty(localName = "EXTRA") val extra: String,
@JacksonXmlProperty(localName = "ALTERNATE") val alternate: String,
@JacksonXmlProperty(localName = "MATCHID") val matchId: Int,
@JacksonXmlProperty(localName = "COUNTERPART") val counterpart: String
)
库存XML
@JacksonXmlRootElement(localName = "INVENTORY")
data class InventoryXML(
@JacksonXmlProperty(localName = "ITEM")
@JacksonXmlElementWrapper(useWrapping = false)
val item: List<ItemXML>
)
以下是将 XML 写入放置在 OnCreate() 方法中的文件的代码:
inventoryXml = xmlMapper.readValue(data, InventoryXML::class.java)
pathFile = filesDir.absolutePath + "/inventory.xml"
xmlMapper.writeValue(File(pathFile), inventoryXml)
这是已保存的文件(如您所见,只有 INVENTORY 标记已保存为大写)
<INVENTORY>
<item>
<alternate>N</alternate>
<color>0</color>
<counterpart>N</counterpart>
<extra>N</extra>
<itemid>old012</itemid>
<itemtype>M</itemtype>
<matchid>0</matchid>
<qty>1</qty>
</item>
<item>
<alternate>N</alternate>
<color>11</color>
<counterpart>N</counterpart>
<extra>N</extra>
<itemid>3430c02</itemid>
<itemtype>P</itemtype>
<matchid>0</matchid>
<qty>1</qty>
</item>
</INVENTORY>
这段代码有什么问题?我希望将标签保存为 JacksonXmlProperty 的 localName 属性中指定的内容。
解决方案
重命名属性以遵循标准 Bean 命名约定,即驼峰式命名,因为这是 Jackson 所期望的:
项目 XML:
data class ItemXML(
@JacksonXmlProperty(localName = "ITEMTYPE") val itemType: String,
@JacksonXmlProperty(localName = "ITEMID") val itemId: String,
@JacksonXmlProperty(localName = "QTY") val qty: Int,
@JacksonXmlProperty(localName = "COLOR") val color: Int,
@JacksonXmlProperty(localName = "EXTRA") val extra: String,
@JacksonXmlProperty(localName = "ALTERNATE") val alternate: String,
@JacksonXmlProperty(localName = "MATCHID") val matchId: Int,
@JacksonXmlProperty(localName = "COUNTERPART") val counterpart: String
)
库存XML
@JacksonXmlRootElement(localName = "INVENTORY")
data class InventoryXML(
@JacksonXmlProperty(localName = "ITEM")
@JacksonXmlElementWrapper(useWrapping = false)
val item: List<ItemXML>
)
推荐阅读
- java - 使用库中的片段活动使用底部导航栏更改片段
- extjs - Extjs 测试框架(jasmine + extjs?)
- python - Altair Hconcat - 是否可以在同一个 HConCat 中为图表配置不同的轴?
- google-apps-script - ImportHTML 按分钟重新计算
- c# - C++/CLI 从 C# Dll 调用函数,回调函数作为参数
- html - Angular:使用条件在页面之间路由
- java - Java:无法覆盖 postVisitDirectory
- css - 移动视图中的 Wordpress 表格最大宽度
- ios - 为什么单元格中的自定义分隔符视图会改变高度?
- python - 在 api 调用中使用 pool.map,再次调用 api