当前位置: 首页 > 知识库问答 >
问题:

Freemarker与SparkJava的集成产生了意外的unicode字符串输出

贡俊
2023-03-14

我正在用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 charset\u003d\”UTF-8\“\u003e\n\u003ctitle\u003etle\u003c/title\u003e\n\u003c/head\u003e\n\u003e\n\u003cbody\u003e\u003c\u003c\u003e\u003e\u003e

我做错了什么?如何正确呈现页面?

共有1个答案

郑晨
2023-03-14

答案很简单:在这种情况下,路由语句如下所示:

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

其中调用toJson引用以下方法

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

在应答器中定义。通过将字符转换为unicode表示,将响应转换为JSON字符串。要获得所需的输出(带有填充变量的HTML),请删除此类调用,使其看起来像:

get("/hello", aMethodToRenderPage);
 类似资料:
  • <?php $random=sp_random_string();//不指定位数,默认为6位 echo $random; //或者 $random=sp_random_string(8);//指定返回8位随机字符串 echo $random; ?>

  • 我正在通过在线示例学习使用FreeMarker的SpringMVC。我遇到了这个错误,但是我不知道我的getFreemarkerConfig()方法有什么问题,一整天我都在试图修复它,但是没有成功。

  • 我有两个向量: 我试图使用比较它们。不幸的是,给出了一个意想不到的结果。 虽然我希望: 那么,这是什么原因造成的呢?怎样才能达到预期的效果呢? 这个问题似乎与这样一个事实有关,即两个向量的最后一个元素与将更改为例如确实给出了预期的结果相同,并且还因为将设置为给出而不是。 编辑 换句话说,我希望丢失的元素(当长度不同时)作为零传递(只有似乎给出

  • 问题内容: 您能否详细说明Python中字节字符串和Unicode字符串之间的区别。我读过这个: 字节码只是将源代码转换为字节数组 这是否意味着Python具有自己的编码/编码格式?还是使用操作系统设置?我不明白 你能解释一下吗?谢谢! 问题答案: 没有python不使用自己的编码。它将使用它有权访问并指定的任何编码。中的字符代表一个unicode字符。但是,要表示256个以上的字符,单个unic

  • 所以我们将html存储在数据模型中。我需要将其输出到freemarker模板中: 例子: 我尝试过[#noescape],但它抛出了一个错误,说没有逃逸障碍。请参阅FREEMARKER:避免转义HTML字符。这个解决方案对我不起作用。

  • 问题内容: 每次我激活插件时,都会收到此消息: 该插件在激活期间生成了80个字符的意外输出。如果您发现“标题已发送”消息,联合供稿问题或其他问题,请尝试停用或删除此插件。 我能够抑制该消息的唯一方法是将激活函数代码包装在 if 语句中(请参阅下面的代码段)。 这是我收到上述错误时的插件代码片段: 接下来,将函数包装在 if 语句中的插件中;如上所述,它抑制了先前的错误: 真正导致该错误的原因是什么