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

标签 spring spring-mvc spring-boot hbbtv

我面临无法解决的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>

因此,我尝试在@Controller中添加“home()”终结点以强制使用正确的mime类型,并且可以正常工作。
@RestController
public class HbbTVController {

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

“有效”表示码头服务器为我提供了包含测试someText的正确内容类型的html文件。

我的下一个尝试是将@RestController替换为@Controller(相同的生成配置),并将“someText”替换为 index.html
@Controller
public class HbbTVController {

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

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

我该怎么办?

谢谢...

最佳答案

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

Spring Boot 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);
    }

}

Spring 启动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);
    }
}

关于Spring Boot,静态资源和mime类型配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47222191/

相关文章:

spring - RedirectView 不使用位置的相对路径

java - 上下文初始化失败(找不到元素 'beans' 的声明) - Spring MVC

java - 如何手动启动Kafka监听器?

java - Spring数据库事务未在Db中提交数据

java - Spring Boot中嵌入式solr服务器的类路径是什么?

java - Spring 4 websockets 导致大量异常

java - 如何使用 Spring Integration 调用安全的 SOAP 服务

java - Spring Data Rest 重写默认 GET 动词

java - Spring 从属性文件中获取枚举值

java - Web应用程序管理上传的文档