我假设杰克逊会在序列化过程中自动逃脱特殊字符,即序列化“/path/”为“ /path /”。似乎并非如此 - 至少以1.6开箱即用:

@Test
public void testJacksonSerialize() throws Exception
{
    ObjectMapper om = new ObjectMapper();
    assertEquals("\\/path\\/", om.writeValueAsString("/path/"));
}

...失败 - 产生的输出为“/path/”。我是否必须编写自己的序列化器,还是有办法在杰克逊中启用特殊的炭逃脱?

谢谢 - 尼基塔

有帮助吗?

解决方案

杰克逊只逃脱了强制性的事情。 “/”不是您必须逃脱的东西,因此不是。根据JSON规范。

现在:如果您绝对想逃脱,则可以使用方法来编写“原始”内容或值(在这种情况下,杰克逊(Jackson)不进行处理,并将字符串转储在输出中)。

但是您真的需要这样的逃脱吗?我知道有些发电机确实逃脱了它(由于我未知的原因),但是没有解析器会期望它,因此将斜杠放在不时髦的情况下应该很好。这与显然必须逃脱的后斜切不同。

其他提示

斜线“/”不需要在JSON中逃脱,因为它没有特殊的含义。但是Json 允许 由于以下原因,要逃脱的斜线。

如果您将JSON文本直接倾倒到u003CSCRIPT> element of an HTML text, you have to make sure that the two-character-sequence "u003C/" does not occur in the text. That sequence would end the script element immediately according to HTML rules. But if the JSON text reads "u003C/", this has the same meaning to JSON while not interferring with HTML rules. Consequently, some JSON generators escape the slash if and only if it's preceded by a less-than-sign.

话虽如此,我不知道您问题的直接答案(如何绝对在杰克逊逃脱)。

在使用一些浏览器的工具提示的情况下,新的行字符将不起作用。不工作 r n不起作用或 n不起作用

使用双反斜杠跳过字符

解决方案:使用' r n'代替' r n',
它将解决您的问题。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top