如何为 Spring Boot/MVC 资源设置可识别的内容/MIME 类型?

Posted

技术标签:

【中文标题】如何为 Spring Boot/MVC 资源设置可识别的内容/MIME 类型?【英文标题】:How to set recognized content/MIME types for Spring Boot/MVC resources? 【发布时间】:2015-02-24 09:03:01 【问题描述】:

使用Spring MVC's ResourceHandler 很容易提供资源。

但是,某些文件,即 .ico 文件无法正确识别,它们没有得到正确的 Content-Type 标头。看来这是由ResourceHttpRequestHandler 处理的:

protected MediaType getMediaType(Resource resource) 
    MediaType mediaType = null;
    String mimeType = getServletContext().getMimeType(resource.getFilename());
    if (StringUtils.hasText(mimeType)) 
        mediaType = MediaType.parseMediaType(mimeType);
    
    if (jafPresent && (mediaType == null || MediaType.APPLICATION_OCTET_STREAM.equals(mediaType))) 
        MediaType jafMediaType = ActivationMediaTypeFactory.getMediaType(resource.getFilename());
        if (jafMediaType != null && !MediaType.APPLICATION_OCTET_STREAM.equals(jafMediaType)) 
            mediaType = jafMediaType;
        
    
    return mediaType;

那么如何在 Spring Boot 1.2 中配置可识别的文件扩展名/MIME 类型? (对于 Tomcat 和 Undertow)

【问题讨论】:

【参考方案1】:

CustomizableEmbeddedServletContainerFactory 有一个method for setting mime types。您可以通过提供 EmbeddedServletContainerCustomizer 类型的 bean 来获得回调。

【讨论】:

但是,当应用程序在单独的 servlet 容器中部署为 war 时,这不起作用。然后您应该配置容器,但我正在尝试提出一个不需要配置所有服务器实例的解决方案。关于如何在 Spring Boot 中处理这个问题的任何想法? 这可能是你可以在容器中配置的东西(例如,Tomcat 有一个为所有应用程序创建默认映射的 web.xml)。

以上是关于如何为 Spring Boot/MVC 资源设置可识别的内容/MIME 类型?的主要内容,如果未能解决你的问题,请参考以下文章

如何为 spring webflux 应用程序配置 oauth2 资源服务器?

Spring MVC 如何为控制器方法提供可注入

使用 JSP 和 POM 中的自定义父集从 Spring Boot MVC 项目中创建一个可执行的 jar 服务内容

Spring Boot Mvc 统一返回结果

如何为带有注释的 spring 设置 context.xml?

如何为 Spring RestTemplate 设置要信任的证书