Хобрук: Ваш путь к мастерству в программировании

VelocityEngine удаляет escape-символы из строки

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

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

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

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

Вопрос:

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

  • Я не знаю VelocityEngine, поэтому не могу помочь вам с вашим первым вопросом. Насчет второго, {"hi": "\\\"hello\\\""} как parameter.querystring помогает? 06.02.2019
  • @KevinCruijssen, да "\\\"hello\\\"" помогает 06.02.2019

Ответы:


1

ПРИМЕЧАНИЕ. Я не знаю VelocityEngine, так что отнеситесь к этому с долей скептицизма.

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

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

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

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

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

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

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

06.02.2019
Новые материалы

Решения DBA Metrix
DBA Metrix Solutions предоставляет удаленного администратора базы данных (DBA), который несет ответственность за внедрение, обслуживание, настройку, восстановление базы данных, а также другие..

Начало работы с Блум
Обзор и Codelab для генерации текста с помощью Bloom Оглавление Что такое Блум? Некоторые предостережения Настройка среды Скачивание предварительно обученного токенизатора и модели..

Создание кнопочного меню с использованием HTML, CSS и JavaScript
Вы будете создавать кнопочное меню, которое имеет состояние наведения, а также позволяет вам выбирать кнопку при нажатии на нее. Финальный проект можно увидеть в этом Codepen . Шаг 1..

Внедрите OAuth в свои веб-приложения для повышения безопасности
OAuth — это широко распространенный стандарт авторизации, который позволяет приложениям получать доступ к ресурсам от имени пользователя, не раскрывая его пароль. Это позволяет пользователям..

Классы в JavaScript
class является образцом java Script Object. Конструкция «class» позволяет определять классы на основе прототипов с чистым, красивым синтаксисом. // define class Human class Human {..

Как свинг-трейдеры могут использовать ИИ для больших выигрышей
По мере того как все больше и больше профессиональных трейдеров и активных розничных трейдеров узнают о возможностях, которые предоставляет искусственный интеллект и машинное обучение для улучшения..

Как построить любой стол
Я разработчик программного обеспечения. Я люблю делать вещи и всегда любил. Для меня программирование всегда было способом создавать вещи, используя только компьютер и мое воображение...