Java 如何在没有xml的SpringMVC中启用RESTGZIP压缩?

Java 如何在没有xml的SpringMVC中启用RESTGZIP压缩?,java,spring,rest,spring-mvc,gzip,Java,Spring,Rest,Spring Mvc,Gzip,有一些过滤器,但没有可用的纯Java解决方案或一些有用的库。我将SpringMVC与Tomcat一起使用,并将发布版本部署到Heroku(因此无法更改servlet容器配置)。如何在没有XML的Spring MVC中启用REST gzip压缩?您可以设置在servlet容器上使用压缩的规则,例如apache tomcat,您可以使用压缩属性。发件人: 压缩 连接器可以使用HTTP/1.1 GZIP压缩来尝试保存 服务器带宽。参数的可接受值为“关闭” (禁用压缩),“打开”(允许压缩,这会导致文本

有一些过滤器,但没有可用的纯Java解决方案或一些有用的库。我将SpringMVC与Tomcat一起使用,并将发布版本部署到Heroku(因此无法更改servlet容器配置)。如何在没有XML的Spring MVC中启用REST gzip压缩?

您可以设置在servlet容器上使用压缩的规则,例如apache tomcat,您可以使用压缩属性。发件人:

压缩

连接器可以使用HTTP/1.1 GZIP压缩来尝试保存 服务器带宽。参数的可接受值为“关闭” (禁用压缩),“打开”(允许压缩,这会导致文本数据 要压缩),“力”(所有情况下的压缩力),或 数值整数值(相当于“on”,但指定 压缩输出前的最小数据量)。如果 内容长度未知,压缩设置为“开”或更大 侵略性,输出也将被压缩。如果未指定,则为 属性设置为“关闭”

注意:在使用压缩(节省时间)和 带宽)和使用sendfile功能(节省CPU周期)。如果 连接器支持sendfile功能,例如NIO连接器, 使用sendfile将优先于压缩。症状 将发送大于48 Kb的静态文件 未压缩。您可以通过设置useSendfile关闭sendfile 属性,或更改 中DefaultServlet配置中的sendfile使用阈值 默认的conf/web.xml或web应用程序的web.xml

压缩

如果压缩设置为“开”,则此属性可用于指定压缩前的最小数据量 输出被压缩。如果未指定,则此属性默认为 “2048年”


一种选择是改为Spring引导并使用嵌入式Tomcat。然后,您可以使用
ConfigurableMbeddedServletContainer
,正如我和我在回答以下问题时所建议的:

如果您选择切换到Spring Boot,Spring Boot参考文档中有一个专门的章节

@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);
                        }
                    }
            );
        }
    };
}