VelocityEngine удаляет escape-символы из строки - PullRequest
0 голосов
/ 06 февраля 2019

Когда я звоню:

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

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

после оценки writer содержит {"hi": ""hello""}

Вопрос:

  • Почему Velocity удаляет экранирующие символы?
  • Как предотвратить удаление экранирующих символов?

1 Ответ

0 голосов
/ 06 февраля 2019

ПРИМЕЧАНИЕ: я не знаю VelocityEngine, поэтому возьмите это с крошкой соли.

Почему Velocity удаляет экранирующие символы?

Скорее всего, VelocityEngine читаетзначения в parameter.querystring JSON как отдельные строки.Таким образом, строка "\"hello\"" читается как текст "hello".Затем в авторе записи он просто вставляет эту строку обратно как есть.

Лично я считаю это недостатком в исходном коде автора, который должен был использовать что-то вроде Pattern.quote(String) для экранирования всех символов перед его вставкой.

Как предотвратить удаление экранирующих символов?

Дополнительный экранированный символ \ можно добавить вручную какобходной путь для поведения писателя.Таким образом, ваш parameter.querystring станет:

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

В основном текст \"hello\", где символы \ и " экранированы с дополнительным \ для помещения его в строку Java..

...