我正在尝试确保某些序列化的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 "Value"</content></message>
但是我想获得没有内容标签的结果:
<message messageID="Example Id">Example "Value"</message>
答案 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
。