对于一系列RESTful服务,我们使用Spring Boot/MVC和基于注释的java-config,并且我们希望在一些API响应上有选择地启用HTTP GZIP流压缩。
我知道我可以在我的控制器和byte[] @ResponseBody
中手动完成这项工作,但是我们更喜欢依赖Spring MVC基础设施(过滤器等),让它自动执行JSON转换和压缩(即该方法返回一个POJO)。
如何在ResponseBody或嵌入式Tomcat实例中启用GZIP压缩,并且在某种程度上我们可以有选择地只压缩一些响应?
我们目前没有任何基于XML的配置。
发布于 2016-07-15 22:38:44
在application.yml
配置中的最新版本上:
---
spring:
profiles: dev
server:
compression:
enabled: true
mime-types: text/html,text/css,application/javascript,application/json
---
发布于 2014-04-17 19:02:02
这基本上与@andy-wilkinson提供的解决方案相同,但是在Spring Boot1.0中,customize(...)方法有一个ConfigurableEmbeddedServletContainer参数。
值得一提的是,默认情况下,Tomcat只压缩text/html
、text/xml
和text/plain
的内容类型。下面是一个支持application/json
压缩的示例:
@Bean
public EmbeddedServletContainerCustomizer servletContainerCustomizer() {
return new EmbeddedServletContainerCustomizer() {
@Override
public void customize(ConfigurableEmbeddedServletContainer servletContainer) {
((TomcatEmbeddedServletContainerFactory) servletContainer).addConnectorCustomizers(
new TomcatConnectorCustomizer() {
@Override
public void customize(Connector connector) {
AbstractHttp11Protocol httpProtocol = (AbstractHttp11Protocol) connector.getProtocolHandler();
httpProtocol.setCompression("on");
httpProtocol.setCompressionMinSize(256);
String mimeTypes = httpProtocol.getCompressableMimeTypes();
String mimeTypesWithJson = mimeTypes + "," + MediaType.APPLICATION_JSON_VALUE;
httpProtocol.setCompressableMimeTypes(mimeTypesWithJson);
}
}
);
}
};
}
发布于 2016-10-25 19:45:22
Spring Boot 1.4将此用于Javascript HTML Json所有压缩。
server.compression.enabled: true
server.compression.mime-types: application/json,application/xml,text/html,text/xml,text/plain,text/css,application/javascript
https://stackoverflow.com/questions/21410317
复制相似问题