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

Jackson-dataformat-xml解析XML时转义字符处理问题咨询

Jackson XML解析:控制实体转义字符的处理

默认情况下,Jackson的XML解析器会遵循XML规范,将&这类实体转义字符解码为对应的原始字符(比如&)。如果你需要改变这一行为,让POJO中保留原始的&字符串,可以通过以下方式配置:

自定义XmlMapper禁用实体解码

核心思路是给底层XML输入工厂设置属性,关闭实体引用替换功能:

import com.fasterxml.jackson.dataformat.xml.XmlMapper;
import com.fasterxml.jackson.dataformat.xml.XmlFactory;
import com.ctc.wstx.stax.WstxInputFactory;

public class CustomXmlMapper {
    public static XmlMapper getNonDecodingMapper() {
        WstxInputFactory inputFactory = new WstxInputFactory();
        // 关闭实体引用替换,保留原始转义字符串
        inputFactory.setProperty(WstxInputFactory.P_REPLACE_ENTITY_REFS, false);
        // 禁用外部实体,避免安全风险
        inputFactory.setProperty(WstxInputFactory.P_SUPPORT_EXTERNAL_ENTITIES, false);
        
        XmlFactory xmlFactory = new XmlFactory(inputFactory);
        return new XmlMapper(xmlFactory);
    }
}

使用这个自定义的XmlMapper解析XML:

String xmlContent = "<example>Air \"B&amp;B\"</example>";
XmlMapper mapper = CustomXmlMapper.getNonDecodingMapper();
ExamplePojo pojo = mapper.readValue(xmlContent, ExamplePojo.class);
// 此时pojo中的对应字段值为"Air \"B&amp;B\""

说明

  • 这里使用了Jackson XML模块默认依赖的Woodstox解析器,若使用其他解析器(如JDK内置的StAX实现),需找到对应的实体替换配置属性。
  • 禁用实体解析后,所有XML实体(如&lt;、&gt;、&quot;等)都会以原始转义形式保留,而非被解码为对应字符。
  • 务必禁用外部实体支持,防止XML实体注入安全风险。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 03:22:55