VelocityEngine 从字符串中删除转义字符

VelocityEngine removes escape characters from string

当我打电话时:

velocityEngine.evaluate(velocityContext, writer, "", template);

parameter.querystring = {"hi": "\"hello\""}

评估后 writer 包含 {"hi": ""hello""}

问题:

注意:我不了解 VelocityEngine,所以对此持保留态度。

Why does Velocity remove escaping characters?

VelocityEngine 很可能将 parameter.querystring JSON 中的值作为单独的字符串读取。所以字符串 "\"hello\"" 被读取为文本 "hello"。然后稍后在编写器中,它只是按原样粘贴这个字符串。

我个人认为这是作者源代码中的一个缺陷,应该使用类似于 Pattern.quote(String) 的方式在插入之前转义所有字符。

How can I prevent removal of escaping characters?

可以手动添加一个额外的转义 \ 作为作者行为的解决方法。所以你的 parameter.querystring 会变成:

{"hi": "\\"hello\\""}

基本上是文本 \"hello\",其中 \" 字符都使用额外的 \ 进行转义,以将其放入 java 字符串中.