在版本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();
最诚挚的问候 约亨
答案 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。