当我打电话时:
velocityEngine.evaluate(velocityContext, writer, "", template);
with parameter.querystring
= {"hi": "\"hello\""}
评估后的writer
包含{"hi": ""hello""}
问题:
答案 0 :(得分:2)
注意:我不了解VelocityEngine,所以要加一点盐。
为什么Velocity会删除转义字符?
最有可能的VelocityEngine读取parameter.querystring
JSON中的值作为单个String。因此,字符串"\"hello\""
被读为文本"hello"
。然后在编写器中稍后,它只是将该字符串直接粘贴回原处。
我个人认为这是编写者源代码中的一个缺陷,在插入之前,它应该已经使用Pattern.quote(String)
行中的某些内容来转义所有字符。
如何防止删除转义字符?
可以手动添加其他转义的\
作为写作者行为的解决方法。这样您的parameter.querystring
将会变成:
{"hi": "\\\"hello\\\""}
基本上是文本\"hello\"
,其中\
和"
字符都被转义,并附加了一个\
以将其放入Java字符串中。