根据Accept标头覆盖Spark中的静态文件路由

时间:2017-08-29 13:50:29

标签: java routing spark-java

我使用Spark'(http://sparkjava.com/)静态文件路由,通过以下方式设置:

externalStaticFileLocation('.../public');

用于提供位于公共目录中的 index.html 页面。如此有效,当您点击服务器的网址时,您将获得 index.html 。到目前为止一切都很好......

但是,当请求包含特定的Accept标头时,我想覆盖此行为,例如 application / rdf + xml (基本上不同于默认的 text / html )。在这种情况下,我想返回一些特定数据,而不是 index.html 页面。

在Spark中有一种简单的方法吗?我无法在文档中找到任何解决方案......感谢您的任何提示!

1 个答案:

答案 0 :(得分:0)

由于您要制作的行为发生变化,您现在要投放的内容不再是静态的,而是动态

您需要从静态内容目录中删除index.html并将其移至资源目录(通常为src/main/resources/templates)。

然后,您需要为域名的根目录(/)创建路线,并使用template engine投放内容。

使用模板引擎时,通常会将动态数据注入静态模板。通常你使用某种地图来做。 在text/html的情况下,您的地图将为空,然后就像之前一样 - 提供静态页面。如果它是application/rdf+xml,您将使用相关数据填充地图,然后提供生成的动态网页。

示例:

get("/", (request, response) -> {
    if (isTextHtml(request)) {
        // serve the index.html template as is (empty map, not null though)
        // In this case index.html functinos as a static page
    } else {
        // use a map to have all relevant data for the index.html template
        // In this case index.html functinos as a "real" template
    }
});