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

使用Jackson XmlMapper序列化含转义双引号字符串到XML异常如何解决

解决Jackson XmlMapper序列化含转义双引号字符串内容重复问题

问题根因

该问题通常由三类原因导致:

  • 2.13.x及更早版本的Jackson XML模块存在已知bug,序列化包含特殊转义字符的字符串时会触发重复写入逻辑
  • 待序列化类的字段可见性配置冲突,序列化器同时读取了成员变量和对应getter方法的返回值,导致内容重复拼接
  • 底层StAX实现(默认woodstox)的输出配置异常,双引号转义时触发了缓冲区内容重复写入

解决方案

方案1:升级Jackson版本(优先推荐)

直接将jackson-dataformat-xml依赖升级到2.15.0及以上稳定版本,官方已在后续版本修复了该转义字符导致的重复输出bug,无需修改业务代码即可解决问题。

方案2:补充序列化注解

在待序列化类的对应字符串字段上添加@JacksonXmlText注解,明确标记该字段为标签内纯文本内容,避免序列化器重复读取:

public class Variables {
    @JacksonXmlText
    private String example;
    // 其他字段、getter/setter
}

如果是字段和getter同时被检测到导致重复,可在类上添加注解关闭重复检测:

@JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.ANY, getterVisibility = JsonAutoDetect.Visibility.NONE)
public class Variables {
    // 类内容
}

方案3:调整XmlMapper输出配置

如果无法升级版本,可手动修改StAX输出工厂的配置,规避转义触发的重复写入:

XmlMapper xmlMapper = new XmlMapper();
// 配置woodstox输出属性,关闭转义时的自动缓冲区刷新
xmlMapper.getFactory().getXMLOutputFactory()
    .setProperty(com.ctc.wstx.api.WstxOutputProperties.P_OUTPUT_ESCAPE_CR, false);
xmlMapper.getFactory().getXMLOutputFactory()
    .setProperty(com.ctc.wstx.api.WstxOutputProperties.P_AUTO_CLOSE_OUTPUT, false);

String xml = xmlMapper.writeValueAsString(variables);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 07:45:07