java - 使用 jackson-dataformat-xml 转义引号

标签 java xml jackson escaping jackson-dataformat-xml

我需要 jackson-dataformat-xml 方面的帮助。我需要序列化List<String>使用XmlMapper将引号 " 编码到 xml 中→ &quot; .

但是序列化后XmlMapper对所有其他特殊符号( <>& 等)进行编码,但完全忽略引号( '" )...如果我在序列化之前手动对字符串进行编码,则内容会变得困惑,因为&quot;'&'里面的序列化为 &amp;quot;而不是当然。

也许有人知道如何让它发挥作用? 另外,有没有办法解决 List<String> 上禁用自动特殊符号编码的问题字段使用 @JacksonRawValue或类似的东西?此注释在简单(非数组)字段上效果很好,但在 List<String> 上无法正常工作。 .

谢谢。

最佳答案

问题是这样解决的。我使用了 woodbox Stax2 扩展。 这很有帮助。 https://github.com/FasterXML/jackson-dataformat-xml/issues/75

XmlMapper xmlMapper = new XmlMapper(module);
xmlMapper.getFactory().getXMLOutputFactory().setProperty(XMLOutputFactory2.P_TEXT_ESCAPER, 
new CustomXmlEscapingWriterFactory());

这里是工厂。

public class CustomXmlEscapingWriterFactory implements EscapingWriterFactory {
public Writer createEscapingWriterFor(final Writer out, String enc) {
    return new Writer(){
        @Override
        public void write(char[] cbuf, int off, int len) throws IOException {
            String val = "";
            for (int i = off; i < len; i++) {
                val += cbuf[i];
            }
            String escapedStr =  StringEscapeUtils.escapeXml(val);
            out.write(escapedStr);
        }

        @Override
        public void flush() throws IOException {
            out.flush();
        }

        @Override
        public void close() throws IOException {
            out.close();
        }
      };
    }

    public Writer createEscapingWriterFor(OutputStream out, String enc) {
        throw new IllegalArgumentException("not supported");
    }
}

关于java - 使用 jackson-dataformat-xml 转义引号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56799368/

相关文章:

jquery - 当路径变量包含 (.) 时,@ResponseBody 不起作用

java - 缺少方法 public void 的依赖关系

java - 我怎样才能解析这种文本?

java - 您如何测试 Iterator/ListIterator 是否有效?

java - 维基文本到 XML

javascript - jQuery 获取 SVG 中指定 ID 的所有元素

java - 如何从 Jackson 的序列化中排除一个集合元素?

java - 如何在 apache commons-cli 中使用命令行和选项

java - 如何知道小部件何时被渲染?

xml - 生成不带 REF 元素的 XSD 文件 - 我只想要一个 "literal"XSD 文件