是否可以组合杰克逊注释@JacksonXmlText和@JsonRawValue?

时间:2019-07-08 16:27:01

标签: java jackson

我正在尝试确保某些序列化的XML值可以转义为HTML。如果在Jackson进行序列化之前将它们转义为HTML,Jackson会尝试对文本进行两次转义,从而导致无效字符串。要解决此问题,我尝试将@JsonRawValue批注添加到我的字段中。这似乎可行,但是现在XML被<content> </content>标记包围了,因为@JacksonXmlText注释由于也存在@JsonRawValue注释而似乎不起作用。

我尝试重新排列注释的顺序。我还尝试配置Jackson XmlMapper,以便不需要使用原始值,但是似乎无法轻松配置XML实体转义。

这是一个简短的示例类:

public class Message implements Serializable {
    @JacksonXmlProperty(localName = "messageID", isAttribute = true)
    private String messageID;

    @JsonRawValue
    @JacksonXmlText
    private String content;
}

我得到这样的结果:

<message messageID="Example Id"><content>Example &quot;Value&quot;</content></message>

但是我想获得没有内容标签的结果:

<message messageID="Example Id">Example &quot;Value&quot;</message>

1 个答案:

答案 0 :(得分:0)

我最终编写了一个自定义Escaper来在编写XML时转义HTML。

static class Escapers implements EscapingWriterFactory { ... }
XMLOutputFactory outF = xmlMapper.getFactory().getXMLOutputFactory();
outF.setProperty(XMLOutputFactory2.P_TEXT_ESCAPER, new Escapers());

据我所知,无法根据需要组合@JacksonXmlText@JsonRawValue