2017-09-25 104 views
0

RESTEasy的文档说除了使用“@GZIP”批注注释服务器端点之外,还需要在运行时环境的类路径中创建一个名为“javax.ws.rs.ext.Providers”的文件,并且在文件中包含类名“org.jboss.resteasy.plugins.interceptors.encoding.GZIPEncodingInterceptor”。RESTEasy启用GZIP支持?

我已经完成了上述所有操作,但即使响应“Content-Encoding”标头为“gzip”(即响应正文为纯文本/ json,但从服务器返回的响应未压缩,尽管标题说了什么)。

当部署到Tomcat时,javax.ws.rs.ext.Providers文件肯定位于.war和应用程序文件夹的WEB-INF/classes文件夹中,但RESTEasy忽略它。

那么,有什么我失踪?有没有人有这个工作?

编辑:好的,我发现RESTEasy实际上是在寻找完整路径“META-INF/services/javax.ws.rs.ext.Providers”,所以我必须在我的文件夹路径中加上文件资源文件夹。是的,这是令人困惑的,因为.war档案中已经有一个META-INF文件夹;但是,将“服务”子文件夹和“javax.ws.rs.ext.Providers”文件放在该META-INF文件夹中不起作用。叹。

+0

您是否使用数据包嗅探器确定未压缩? – Namphibian

+0

是的,我使用TCPMon来检查流量并确定流量是未压缩的JSON,尽管HTTP头声称它是gzip。 –

回答

2

我得到它的工作&我希望这会帮助你解决同样的问题。诀窍是在WEB-INF/classes中有这个。我所做的就是有javax.ws.rs.ext.Providers的位置:/WEB-INF /班/ META-INF /服务 &瞧它开始工作。

其原因是在代码尝试搜索此文件时遇到类加载器引用。我正在使用tomcat。但是,如果您使用JBoss或任何其他应用程序/ Web服务器,则类加载机制可能因容器实现而异。所以要弄清楚哪个是你的服务器的最佳位置。