You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置XmlMapper实现无注解POJO的重复元素XML序列化

解决Jackson XML自动生成重复标签名的配置方案

要实现你需要的XML输出结构,无需在POJO上添加任何注解,只需要通过XmlMapper的配置来调整命名策略和集合序列化行为即可。以下是具体步骤和代码示例:

1. 核心配置代码

首先创建并配置XmlMapper实例,关键是设置属性命名策略、启用集合包裹和根节点包裹:

import com.fasterxml.jackson.databind.PropertyNamingStrategy;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.dataformat.xml.XmlMapper;

// 配置XmlMapper
XmlMapper xmlMapper = XmlMapper.builder()
    // 将类名、字段名转换为全小写(比如Catalog→catalog,Item→item)
    .propertyNamingStrategy(PropertyNamingStrategy.LOWER_CASE)
    // 为集合字段启用外层包裹标签(List<Item> items会生成<items>标签)
    .defaultUseWrapper(true)
    // 将整个POJO包裹在以类名小写命名的根标签中(Catalog→<catalog>)
    .enable(SerializationFeature.WRAP_ROOT_VALUE)
    .build();

2. 测试序列化

假设你的Item类是简单的POJO(同样无需注解):

public class Item {
    public String productName = "Laptop";
    public double price = 999.99;
}

然后创建Catalog实例并序列化:

Catalog catalog = new Catalog();
catalog.items.add(new Item());
catalog.items.add(new Item());

// 生成XML字符串
String xmlOutput = xmlMapper.writeValueAsString(catalog);

生成的XML结构会完全符合你的需求:

<catalog>
  <items>
    <item>
      <productname>Laptop</productname>
      <price>999.99</price>
    </item>
    <item>
      <productname>Laptop</productname>
      <price>999.99</price>
    </item>
  </items>
</catalog>

3. 配置项说明

  • PropertyNamingStrategy.LOWER_CASE:统一处理类名和字段名的大小写,自动将Catalog转为<catalog>,Item转为<item>,items字段转为<items>标签,完全不需要手动注解指定名称。
  • defaultUseWrapper(true):告诉Jackson XML为集合类型的字段添加外层包裹标签,避免直接将集合元素平铺在根节点下,确保<items>作为<item>的父容器。
  • SerializationFeature.WRAP_ROOT_VALUE:将整个Catalog对象包裹在根标签<catalog>中,匹配你需要的XML结构层级。

4. 依赖说明

确保你的项目中已经引入Jackson XML的依赖(以Maven为例):

<dependency>
    <groupId>com.fasterxml.jackson.dataformat</groupId>
    <artifactId>jackson-dataformat-xml</artifactId>
    <version>2.15.2</version> <!-- 使用最新稳定版本即可 -->
</dependency>

内容的提问来源于stack exchange,提问作者Radoslav Ivanov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:20:24