Jakarta ee JAX-RS Java EE 8:Gzip如果设置了某个头,则输出JSON

Jakarta ee JAX-RS Java EE 8:Gzip如果设置了某个头,则输出JSON,jakarta-ee,wildfly,Jakarta Ee,Wildfly,我正在从事一个关于JavaEE8的项目。我正在使用JAX-RS构建我的API。现在,如果在请求中找到头,比如gzip:1,我想压缩我所有API的输出(顺便说一下,所有API都返回JSON) 有没有办法拦截ContainerResponseFilter中的所有响应,然后压缩/GZIP输出JSON?您可以使用JAX-RSWriterInterceptor来更改原始输出流 这里解释了一切: 下面是有趣的部分: @Provider public class GZIPEncoder implements

我正在从事一个关于
JavaEE8
的项目。我正在使用JAX-RS构建我的API。现在,如果在请求中找到头,比如
gzip:1
,我想压缩我所有API的输出(顺便说一下,所有API都返回JSON)


有没有办法拦截ContainerResponseFilter中的所有响应,然后压缩/GZIP输出JSON?

您可以使用JAX-RS
WriterInterceptor
来更改原始输出流

这里解释了一切:

下面是有趣的部分:

@Provider
public class GZIPEncoder implements WriterInterceptor {

   public void aroundWriteTo(WriterInterceptorContext ctx)
                    throws IOException, WebApplicationException {
      GZIPOutputStream os = new GZIPOutputStream(ctx.getOutputStream());
      ctx.getHeaders().putSingle("Content-Encoding", "gzip");
      ctx.setOutputStream(os);
      ctx.proceed();
      return;
   }
}
现在,为了在请求和响应之间共享一些信息(是否标记为gzip),您可以使用
InterceptorContext.set/getProperty

“属性允许JAX-RS筛选器和拦截器交换此接口尚未提供的其他自定义信息。”

因此,首先在拦截请求时设置一个属性,然后在写入侦听器(GZIPEncoder)中使用它来决定是否压缩

祝塔克德霍科好运您可以再次检查头是否存在