首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用jackson-dataformat-xml转义引号

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

Stack Overflow用户
提问于 2019-06-28 07:10:19
回答 1查看 1.6K关注 0票数 4

我需要jackson-dataformat-xml的帮助。我需要将使用XmlMapperList<String>序列化为编码" &quot;→的报价。

但在序列化之后,XmlMapper会对所有其他特殊符号(<>&等)进行编码,但会忽略引号('")……如果我在序列化之前手动对字符串进行编码,内容会变得一团糟,因为&quot;内部有'&',而不是序列化为&amp;quot;

也许有人知道如何让它工作?另外,有没有办法使用@JacksonRawValue或类似的东西来禁用List<String>字段上的自动特殊符号编码?这个注释在简单的(非数组)字段上工作得很好,但在List<String>上就不能正常工作了。

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2019-06-28 08:55:00

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

代码语言:javascript
复制
XmlMapper xmlMapper = new XmlMapper(module);
xmlMapper.getFactory().getXMLOutputFactory().setProperty(XMLOutputFactory2.P_TEXT_ESCAPER, 
new CustomXmlEscapingWriterFactory());

这是工厂。

代码语言:javascript
复制
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");
    }
}
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56799368

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档