2

Java servlet API 直到 3.0 版才为 HttpServletResponse 提供 getStatus 方法。我用 getStatus 创建了一个 HttpServletResponseWrapper 来包装 HttpServletResponse 并在设置状态时捕获它。

这不适用于我的 Jersey 2 servlet。

我的 HttpServletResponseWrapper 是通过我的过滤器的 doFilter(request, wrapperResponse) 传递的。当 Jersey RESTful Servlet 是端点时,会调用 Filter 但不会调用 getStatus 方法。

有没有我错过的配置?

我使用响应生成器返回结果并设置状态。

Response.status(404).build(); Response.status(200).type(mediaType).entity(theEntity).build();

最好的问候

4

1 回答 1

1

您不需要HttpServletResponseWrapper用于 GZIP 压缩。它可以通过WriterInterceptor来自 JAX-RS 的来实现:

public class GZIPWriterInterceptor implements WriterInterceptor {

    @Override
    public void aroundWriteTo(WriterInterceptorContext context)
                throws IOException, WebApplicationException {
        final OutputStream outputStream = context.getOutputStream();
        context.setOutputStream(new GZIPOutputStream(outputStream));
        context.proceed();
    }
}

然后WriterInterceptor在您的ResourceConfig/Application子类中注册:

@ApplicationPath("/api")
public class MyApplication extends ResourceConfig {

    public MyApplication() {
        register(GZIPWriterInterceptor.class);
    }
}

要将拦截器绑定到某些资源方法或类,您可以使用名称绑定注释

于 2017-10-11T15:40:22.323 回答