Интеграция Freemarker со SparkJava приводит к неожиданному выводу строки в юникоде - PullRequest
0 голосов
/ 04 ноября 2018

Я создаю приложение в SparkJava с интеграцией freemarker.

Я пытаюсь отобразить шаблон freemarker (фактически не содержащий переменных):

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<p>hello</p>
</body>
</html>

В моем контроллере у меня есть следующая конфигурация:

final Configuration configuration = new Configuration(Configuration.VERSION_2_3_26);
final ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader();
configuration.setDirectoryForTemplateLoading(new File(contextClassLoader.getResource("www/public").toURI()));
configuration.setDefaultEncoding("UTF-8");
configuration.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER);
configuration.setLogTemplateExceptions(false);
return new FreeMarkerEngine(configuration).render(new ModelAndView(Collections.singletonMap("",""), "index.ftl"));

Но в браузере выводится следующее:

"\ u003c! DOCTYPE html \ u003e \ n \ u003chtml lang \ u003d \ en \ u003e \ n \ u003chead \ u003e \ n \ u003cmeta кодировка \ u003d \ "UTF-8 \" \ u003e \ п \ U003ctitle \ u003eTitle \ u003c / название \ u003e \ п \ u003c / голова \ u003e \ п \ u003cbody \ u003e \ п \ u003cp \ u003ehello \ u003c / р \ u003e \ п \ u003c / тело \ u003e \ N \ u003c / HTML \ u003e "

Что я делаю не так и как я могу правильно отобразить страницу?

1 Ответ

0 голосов
/ 07 ноября 2018

Ответ тривиален: в такой ситуации инструкция маршрута выглядела следующим образом:

get("/hello", aMethodToRenderPage, gson::toJson);

Где вызов toJson относится к следующему методу

@Override
public String render(Object model) {
    return gson.toJson(model);
}

определено в ResponseTransformer. Это преобразует ответ в строку JSON, превращая символы в представление в юникоде. Чтобы получить желаемый результат (HTML с заполненными переменными), удалите такой вызов, чтобы он выглядел так:

get("/hello", aMethodToRenderPage);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...