根据 Accept header 在 Spark 中覆盖静态文件路由

Overriding static file routes in Spark depending on the Accept header

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

externalStaticFileLocation('.../public');

用于提供位于 public 目录中的 index.html 页面等。如此有效,当您点击服务器的 URL 时,您会返回 index.html。到目前为止一切顺利...

但是,当请求包含特定的接受 header 时,我想覆盖此行为,例如 application/rdf+xml (与默认的text/html基本不同)。在那种情况下,我想要 return 一些特定数据而不是 index.html 页面。

在 Spark 中有实现此目的的简单方法吗?我在文档中找不到任何解决方案...感谢任何提示!

由于您想要做出的行为改变,您现在想要提供的内容不再是静态的,而是动态的

您需要从静态内容目录中删除 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
    }
});