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

Java VelocityEngine从字符串中删除转义字符,java,escaping,velocity,Java,Escaping,Velocity,当我打电话时: velocityEngine.evaluate(velocityContext,编写器,”,模板) 使用参数.querystring={“hi”:“\“hello\”} 经过评估后,writer包含{“hi”:“hello”“} 问题: 为什么Velocity会删除转义字符 如何防止删除转义字符 注意:我不知道速度引擎,所以请少说一点 为什么Velocity会删除转义字符 最有可能的是VelocityEngine将parameter.querystringJSON中的值作为单个

当我打电话时:

velocityEngine.evaluate(velocityContext,编写器,”,模板)

使用
参数.querystring
=
{“hi”:“\“hello\”}

经过评估后,
writer
包含
{“hi”:“hello”“}

问题:

  • 为什么Velocity会删除转义字符
  • 如何防止删除转义字符

注意:我不知道速度引擎,所以请少说一点

为什么Velocity会删除转义字符

最有可能的是VelocityEngine将
parameter.querystring
JSON中的值作为单个字符串读取。因此字符串
“\”hello\”
被读取为文本
“hello”
。然后在编写器的后面,它只是将这个字符串按原样粘贴回去

就我个人而言,我认为这是作者源代码中的一个缺陷,在插入之前,作者应该使用类似于的内容来转义所有字符

如何防止删除转义字符

可以手动添加另一个转义的
\
,作为编写器行为的解决方法。因此,您的
参数.querystring
将变成:

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

基本上是文本
\\“hello\”
,其中
\
字符都用一个额外的
\
转义以放入java字符串中。

我不懂VelocityEngine,所以我无法帮助你回答第一个问题。至于第二个问题,
{“hi”:“\\\\\\\\“hello\”}
as
parameter.querystring
help?@KevinCruijssen,yes
“\\\\”你好\\\\”
help