泽西2状态代码在HttpServletResponseWrapper中不可见

时间:2017-10-11 14:44:07

标签: java jersey servlet-filters http-status-codes servlet-2.5

在版本3.0之前,Java servlet API不为HttpServletResponse提供getStatus方法。我创建了一个带有getStatus的HttpServletResponseWrapper来包装HttpServletResponse并在设置时捕获状态。

这不适用于我的Jersey 2 servlet。

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

我错过了任何配置吗?

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

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

最诚挚的问候 约亨

1 个答案:

答案 0 :(得分:1)

您不需要HttpServletResponseWrapper进行GZIP压缩。可以使用JAX-RS的WriterInterceptor来实现:

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

要将拦截器绑定到某些资源方法或类,可以使用name binding annotations