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

如何使用Jackson XmlMapper处理含混合内容的XML序列化

使用Jackson XmlMapper生成含混合内容的XML

要生成你需要的混合内容XML,核心是利用Jackson XML模块的@JacksonXmlText注解处理元素内的文本内容,同时定义嵌套的子元素对象。

1. 引入Jackson XML依赖

如果用Maven,在pom.xml中添加:

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

2. 定义对应的Java类

import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty;
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlText;

// 顶层Foo类
public class Foo {
    @JacksonXmlProperty(localName = "bar")
    private Bar bar;

    // 构造器、getter/setter
    public Foo() {}
    public Foo(Bar bar) {
        this.bar = bar;
    }

    public Bar getBar() {
        return bar;
    }

    public void setBar(Bar bar) {
        this.bar = bar;
    }
}

// Bar类,包含混合内容
public class Bar {
    @JacksonXmlProperty(localName = "a")
    private A a;

    @JacksonXmlProperty(localName = "b")
    private B b;

    @JacksonXmlText // 标记该字段为元素的文本内容
    private String text;

    // 构造器、getter/setter
    public Bar() {}
    public Bar(A a, B b, String text) {
        this.a = a;
        this.b = b;
        this.text = text;
    }

    public A getA() {
        return a;
    }

    public void setA(A a) {
        this.a = a;
    }

    public B getB() {
        return b;
    }

    public void setB(B b) {
        this.b = b;
    }

    public String getText() {
        return text;
    }

    public void setText(String text) {
        this.text = text;
    }
}

// A类(对应空元素<a>)
public class A {}

// B类(对应空元素<b>)
public class B {}

3. 序列化测试代码

import com.fasterxml.jackson.dataformat.xml.XmlMapper;
import java.io.IOException;

public class XmlGenerator {
    public static void main(String[] args) throws IOException {
        XmlMapper xmlMapper = new XmlMapper();
        xmlMapper.enable(com.fasterxml.jackson.core.JsonGenerator.Feature.INDENT_OUTPUT); // 格式化输出

        // 构建对象
        Foo foo = new Foo(new Bar(new A(), new B(), "Some text"));

        // 序列化为XML字符串
        String xml = xmlMapper.writeValueAsString(foo);
        System.out.println(xml);
    }
}

关键说明

  • @JacksonXmlText是实现混合内容的核心,它会将标注的字段值直接作为父元素(这里是<bar>)的文本内容,和其他子元素<a>、<b>混合排列。
  • @JacksonXmlProperty(localName = "...")用来指定XML元素的名称,确保和目标结构一致。
  • 空元素<a>和<b>对应的Java类可以是空类,Jackson会自动生成空标签。

运行上述代码后,输出的XML结构就会和你需要的一致:

<foo>
  <bar>
    <a/>
    Some text
    <b/>
  </bar>
</foo>

内容的提问来源于stack exchange,提问作者Paweł Adamski

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 17:08:28