Jackson 2.12.7 XML转JSON时带属性元素空键名替换问题
解决Jackson XML转JSON时文本内容空键名的问题
针对你用Jackson 2.12.7的XMLMapper和ObjectMapper转XML到JSON时,XML元素文本内容对应JSON空键名的问题,有两种实用解决方式:
方式一:全局配置XMLMapper(无需定义POJO)
直接修改XMLMapper的默认文本节点名称,所有XML元素的文本内容都会映射到指定键名(比如"Value"或"City")。代码示例:
XmlMapper xmlMapper = XmlMapper.builder() // 替换成你想要的键名,比如"Value" .defaultTextNodeName("Value") .build(); ObjectMapper objectMapper = new ObjectMapper(); String xml = "<Address><Province Code=\"MI\">MILAN</Province></Address>"; JsonNode node = xmlMapper.readTree(xml); String json = objectMapper.writeValueAsString(node);
执行后得到的JSON为:{"Province":{"Code":"MI","Value":"MILAN"}}
方式二:用POJO配合注解(适合结构化场景)
如果XML结构固定,可定义对应POJO类,通过@JacksonXmlText注解指定文本内容的JSON键名:
// Province类 public class Province { @JacksonXmlProperty(localName = "Code") private String code; // 字段名即为JSON键名,比如改为"City"会对应"City":"MILAN" @JacksonXmlText private String Value; // 生成getter、setter方法 } // Address类 public class Address { private Province Province; // 生成getter、setter方法 }
转换代码:
XmlMapper xmlMapper = new XmlMapper(); ObjectMapper objectMapper = new ObjectMapper(); String xml = "<Address><Province Code=\"MI\">MILAN</Province></Address>"; Address address = xmlMapper.readValue(xml, Address.class); String json = objectMapper.writeValueAsString(address);
这种方式适合需要严格映射XML结构的场景,键名可按需自定义。
内容的提问来源于stack exchange,提问作者ccirim
相关产品推荐
相关产品推荐

