Resteasy通常启用GZIP

时间:2013-07-25 10:43:46

标签: resteasy gzipstream

我有一个RestEasy + Java EE应用程序。当我将@GZIP添加到组件类时,如果客户端发送“accepted:gzip”,那么服务器应答是gzip压缩的

有没有办法为所有组件启用gzip?我不想在每个班级都添加注释。

我正在使用RestEasy JAX-RS 3.0.1

5 个答案:

答案 0 :(得分:1)

如果您在接口后面实现API,那么所有接口都可以从一个接口继承,让我们命名为#34; BaseAPI" 在逻辑上,如果你在BaseAPI上设置@Gzip,那么它将为所有继承的接口和方法应用Content-Encoding。

@GZIP
public interface BaseAPI
{
}


public interface APIX extends BaseAPI
{
   @GET
   Response getSomething() {
}

答案 1 :(得分:0)

不,注释无法为所有资源启用gzip。如果你想放弃在每个类中添加注释,你可以创建一个servlet过滤器,查看传入的头文件并在出路时gzip响应。

答案 2 :(得分:0)

你可以使用自定义JAX-RS 2.0过滤器和拦截器来实现这一点,而一旦你知道如何,它就不会特别难。

您需要做的是添加一个过滤器,修改GZIP的现有过滤器,以便检查是否存在支持编码的注释,它只查找Accept -Encoding标头。

了解如何实施RestEasy GZIP编码: https://github.com/resteasy/Resteasy/tree/master/jaxrs/resteasy-jaxrs/src/main/java/org/jboss/resteasy/plugins/interceptors/encoding

您需要添加具有方法configure(ResourceInfo resourceInfo, FeatureContext configurable)的功能,始终添加GZIP过滤器,无论是否存在注释。您需要一个为服务器注册自定义过滤器的功能,以及一个用于客户端的功能。

有了这些,预先存在的GZIP拦截器完成剩下的工作。

我使用了类似的机制来创建自定义压缩过滤器(尽管我最终将其设置为由注释应用以限制范围)。

答案 3 :(得分:0)

为此使用Apache。 Apache可以自动处理它并优化(对您而言为gzip)对客户端的所有响应。它不仅会gzip它,还会附加所有必要的响应标头,这些标头允许客户端识别该内容是zippid以便他们将其解压缩。

此问题无需更改代码。

答案 4 :(得分:0)

Reasteasy 有这个 GZIPDecodingInterceptor。因此,您可以在创建客户端时执行此操作:

import org.jboss.resteasy.plugins.interceptors.GZIPDecodingInterceptor;
import org.jboss.resteasy.client.jaxrs.internal.ResteasyClientBuilderImpl;

ResteasyClient client = new ResteasyClientBuilderImpl().build();
client.register(GZIPDecodingInterceptor.class);