Jersey 2 状态代码在 HttpServletResponseWrapper 中不可见
Jersey 2 status code not visible in HttpServletResponseWrapper
Java servlet API 在 3.0 版之前不提供 HttpServletResponse 的 getStatus 方法。我创建了一个带有 getStatus 的 HttpServletResponseWrapper 来包装 HttpServletResponse 并在设置时捕获状态。
这不适用于我的 Jersey 2 servlet。
我的 HttpServletResponseWrapper 是通过我的过滤器的 doFilter(request, wrapperResponse) 传递的。当 Jersey RESTful Servlet 是端点时,会调用 Filter 但不会调用 getStatus 方法。
有没有我遗漏的配置?
我使用响应生成器 return 结果并设置状态。
Response.status(404).build();
Response.status(200).type(mediaType).entity(theEntity).build();
最好的问候
约臣
您不需要来自 JAX-RS 的 HttpServletResponseWrapper
for GZIP compression. It could be achieved with a 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
in your ResourceConfig
/ Application
子类:
@ApplicationPath("/api")
public class MyApplication extends ResourceConfig {
public MyApplication() {
register(GZIPWriterInterceptor.class);
}
}
要将拦截器绑定到某些资源方法或 类,您可以使用 .
Java servlet API 在 3.0 版之前不提供 HttpServletResponse 的 getStatus 方法。我创建了一个带有 getStatus 的 HttpServletResponseWrapper 来包装 HttpServletResponse 并在设置时捕获状态。
这不适用于我的 Jersey 2 servlet。
我的 HttpServletResponseWrapper 是通过我的过滤器的 doFilter(request, wrapperResponse) 传递的。当 Jersey RESTful Servlet 是端点时,会调用 Filter 但不会调用 getStatus 方法。
有没有我遗漏的配置?
我使用响应生成器 return 结果并设置状态。
Response.status(404).build(); Response.status(200).type(mediaType).entity(theEntity).build();
最好的问候 约臣
您不需要来自 JAX-RS 的 HttpServletResponseWrapper
for GZIP compression. It could be achieved with a 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
in your ResourceConfig
/ Application
子类:
@ApplicationPath("/api")
public class MyApplication extends ResourceConfig {
public MyApplication() {
register(GZIPWriterInterceptor.class);
}
}
要将拦截器绑定到某些资源方法或 类,您可以使用