在 Spring 5 中使用自定义 Content-Type 提供静态内容

问题描述 投票:0回答:2

我正在尝试设置我的应用程序来提供 JSON 架构文件。这部分很简单,就完成了。我正在努力解决的是让它们提供正确的内容类型 -

application/schema+json
- 而不是默认的 -
application/json

我的配置非常简单:

override fun addResourceHandlers(registry: ResourceHandlerRegistry) {
    registry.addResourceHandler("/api/schemas/**")
            .addResourceLocations("classpath:/schemas/")
}

但是除了缓存之外,我看不到任何明显的更改任何标头的信息。

spring spring-mvc spring-boot
2个回答
0
投票

尝试重写 configureContentNegotiation 方法。这是我的 Java 代码。下面,我为 javascript 模块设置了 “text/javascript” MIME 类型。

@Override
public void configureContentNegotiation(ContentNegotiationConfigurer configurer) {
    configurer.mediaType("mjs", new MediaType("text","javascript"));
}

0
投票

对于 2.x 和 3.x 版本,如果想要为特定文件扩展名指定响应类型,则可以使用

WebServerFactoryCustomizer
来完成。这样可以自定义
TomcatServletWebServerFactory
映射以包含所需的文件扩展名和相应的内容类型。

示例代码-

import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.boot.web.server.MimeMappings;
import org.springframework.boot.web.server.WebServerFactoryCustomizer;
import org.springframework.stereotype.Component;

@Component
public class MimeMappingCustomizer implements WebServerFactoryCustomizer<TomcatServletWebServerFactory> {

    @Override
    public void customize(TomcatServletWebServerFactory factory) {
        MimeMappings mm = factory.getMimeMappings();
        mm.add("mjs", "application/javascript");

        factory.setMimeMappings(mm);
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.