Spring Boot、静态资源和mime类型配置

2023-11-23

我面临着无法处理的 Spring Boot 配置问题...... 我正在尝试使用 Spring Boot 为 HbbTV 构建一个 HelloWorld 示例,因此我需要使用 mime-type="application/vnd.hbbtv.xhtml+xml" 来服务我的“index.html”页面

例如,我的 index.html 将作为静态页面访问http://myserver.com/index.html?param=value.

使用以下代码,无论我多么努力,我都会得到 text/html 内容类型。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//HbbTV//1.1.1//EN" "http://www.hbbtv.org/dtd/HbbTV-1.1.1.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
    <title>MyApp HBBTV</title>
    <meta http-equiv="content-type" content="Content-Type: application/vnd.hbbtv.xhtml+xml; charset=UTF-8" />
</head>
<body>
...
</body>
</html>

因此,我尝试将“home()”端点添加到 @Controller 中以强制使用正确的 mime 类型,这很有效。

@RestController
public class HbbTVController {

    @RequestMapping(value = "/hbbtv", produces = "application/vnd.hbbtv.xhtml+xml")
    String home() {
        return "someText";
    }
...
}

“有效”意味着jetty服务器为我提供了一个html文件,该文件具有包含测试someText的正确内容类型。

我的下一个尝试是用 @Controller 替换 @RestController (相同produce配置),并将“someText”替换为索引.html

@Controller
public class HbbTVController {

    @RequestMapping(value = "/hbbtv", produces = "application/vnd.hbbtv.xhtml+xml")
    String home() {
        return "index.html";
    }
...
}

好吧,它正确地为我的index.html提供服务,但内容类型是错误的:text/html而不是application/vnd.hbbtv.xhtml+xml。 此外,我不想访问myserver.com/hbbtv来获取index.html,而是直接访问myserver.com/index.html。

我怎么能这么做呢?

谢谢...


好吧,终于,我找到了“Spring boot 兼容解决方案”。这与 Jamie Birch 的建议相同,但通过 Spring 机制实现。

春季启动1:

@Configuration
public class HbbtvMimeMapping implements EmbeddedServletContainerCustomizer {

    @Override
    public void customize(ConfigurableEmbeddedServletContainer container) {
        MimeMappings mappings = new MimeMappings(MimeMappings.DEFAULT);
        mappings.add("html", "application/vnd.hbbtv.xhtml+xml; charset=utf-8");
        mappings.add("xhtml", "application/vnd.hbbtv.xhtml+xml; charset=utf-8");
        container.setMimeMappings(mappings);
    }

}

春季启动2:

@Configuration
public class HbbtvMimeMapping implements WebServerFactoryCustomizer<ConfigurableServletWebServerFactory> {
    @Override
    public void customize(ConfigurableServletWebServerFactory factory) {
        MimeMappings mappings = new MimeMappings(MimeMappings.DEFAULT);
        mappings.add("html", "application/vnd.hbbtv.xhtml+xml; charset=utf-8");
        mappings.add("xhtml", "application/vnd.hbbtv.xhtml+xml; charset=utf-8");
        factory.setMimeMappings(mappings);
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring Boot、静态资源和mime类型配置 的相关文章

随机推荐

  • 如何使用自制程序中的 openSSL 在 macOS 上编译 Python 3.6.2?

    我正在尝试根据 macOS 10 11 上的说明编译 Python 3 6 2https bugs python org issue29095 我使用自制程序将 openSSL 安装到标准位置 然后将 LDFLAGS CFLAGS 和 CP
  • 如何使用 Python 将 SQL IN 子句格式化为字符串

    我正在尝试创建如下声明 SELECT FROM table WHERE provider IN provider1 provider2 但是 我在 Django API 的字符串格式化方面遇到了一些问题 这是我到目前为止所拥有的 profi
  • WCF 数据服务:如何避免 __metadata 成员

    我目前正在尝试使用 WCF 数据服务来进一步开放我们的产品 同时能够使用来自 AJAX 的数据 我注意到的一件事是 JSON 表示格式将这些 metada 成员散布在数据中 并且在 OData 文档中我发现了这一点 在代表条目 可选的 me
  • && 的优先级高于 || [复制]

    这个问题在这里已经有答案了 据我所知逻辑运算符 优先级高于 运行代码时 include
  • 树莓派Qt5设置物理屏幕尺寸

    我正在使用交叉编译在 raspbian 上的树莓派上开发 qt5 应用程序 当我运行它时 我得到一个黑屏 试图显示一个 QFrame 弹出窗口 我想它无法定位 因为我在开头收到了错误消息 EGLFS 无法查询物理屏幕尺寸 默认为100 dp
  • 为什么 '.sort()' 会导致 Python 中的列表为 'None'? [复制]

    这个问题在这里已经有答案了 我正在尝试对 Python 列表进行排序ints 然后使用 pop 函数返回最高的一个 我尝试过以不同的方式编写该方法 def LongestPath T paths Ancestors T x for x in
  • 计算出一天已过去的百分比

    有点奇怪的问题 但希望有人能帮忙 本质上 如果时间是中午 12 点 则经过百分比为 50 上午 6 点为 25 下午 16 点为 75 给定当前时间 您如何计算出已经过去了多少天 假设您可以获得一天中的当前时间 那么计算一天过去的百分比将非
  • JSpinner.DateEditor 必须包含年份,即使开始和结束是同一年

    我有一个使用 SpinnerDateModel 的 JSpinner 其开始日期为 2010 年 1 月 1 日 00 00 00 000 结束日期为 2010 年 1 月 1 日 00 12 34 217 我希望我的 JSpinner D
  • 如何设置在整个应用程序中可访问的全局变量

    我开发了一个带有全局变量的PHP页面 如下所示 global amty imgCache amty imgCache array GLOBALS amty imgCache amty imgCache 该页面具有向该数组添加 删除条目的功能
  • 使用管道符号作为分隔符拆分字符串

    为什么下面的输出是 并不是 1 String input 1 2 3 String values input split System out println values 0 Output 但是 如果我们更改分隔符 则输出为 1 Stri
  • Grub 2 未检测到内核中的多重引导标头

    我在使用 Grub 2 以及 QEMU 的 kernel 没有检测到我的内核中的 Multiboot v1 标头 我之前将标题放在单独的部分中 text linker ld SECTIONS 1M multiboot ALIGN 4K mu
  • 如何列出 git 存储库中跟踪文件的所有不同扩展名?

    我想知道所有不同的扩展名给定存储库中 git 跟踪的文件的数量 以便创建适当的 gitattributes file 预期输出示例 bat gitignore gradle html jar java js json md png prop
  • Golang 中的泛型方法参数

    我需要帮助才能使其适用于任何类型 我有一个函数 我需要接受其他类型ID财产 我尝试过使用接口 但这对我来说不起作用ID财产案 这是代码 package main import fmt strconv type Mammal struct I
  • 如何加密非阻塞 PHP 套接字流?

    我正在尝试以非阻塞 异步 方式使用 PHP 的stream socket client 函数 PHP 网站上的文档表明 STREAM CLIENT ASYNC CONNECT 选项标志应该启用此功能 然而 下面的代码 start time
  • C# .net 更改标签文本

    您好 我尝试使用此代码 但由于某种原因它不起作用 确实需要帮助 问题是当我进入网站时 标签不会从 标签 更改名称
  • 是否可以在我的网站上禁用 IE8“加速器”?

    我是一名专注于 UI 的 Web 开发人员 我的 Web 应用程序中的许多界面功能都是基于双击的 在 IE 中 这会带来新的烦人的问题 加速器 图标干扰我的用户界面 是否可以禁用我的页面上的 加速器 也许有一些新的愚蠢的特定于 IE 的me
  • 如何捕获div中的一行文本

    我浏览过与此相关的类似 SO 帖子 但没有一个完全符合我正在寻找的内容 假设我有一些文本 我将其放入 div 中 然后向该 div 添加一些任意 甚至可能是动态 宽度 有没有什么方法可以让我以编程方式捕获和操作 div 中的各个文本行 例如
  • Json.NET 按深度和属性序列化

    例如我们有两个类 class FooA SomeSpecialAttribute public int SomeValueA get set public int SomeValueB get set public int SomeValu
  • Persistence.xml放在eclipse项目的哪里

    简单的问题 我在Eclipse环境中有一些项目MainApp 企业应用项目 其中 包含 Web控制器 EJB项目 WebModel JPA 项目 WebView 动态Web项目 问题是 persistence xml 文件放在哪里 获取异常
  • Spring Boot、静态资源和mime类型配置

    我面临着无法处理的 Spring Boot 配置问题 我正在尝试使用 Spring Boot 为 HbbTV 构建一个 HelloWorld 示例 因此我需要使用 mime type application vnd hbbtv xhtml