MessageBodyWriter与WriterInterceptor

时间:2014-08-18 08:54:55

标签: java-ee jax-rs java-ee-7

我对 JAX-RS 2.0规范的WriterInterceptor接口的确切意图感到有些困惑。

到目前为止我所知道的:

    WriterInterceptor 之前调用
  • MessageBodyWriter
  • 两个接口都授予对相同变量的访问权限
  • MessageBodyWriter关注将object转换为
  • Arun Gupta在他的Java EE 7书中指出 Writer / Reader Inteceptors 主要关注HTTP主体的编组和解组。

我的问题: Reader / Writer Interceptor 应该用于哪个意图?

1 个答案:

答案 0 :(得分:3)

在服务器端,您可以让Message Body Writers执行实体编组,而拦截器可以处理:

  • 对编组实体执行GZIP压缩,
  • 将编组实体包装在Digital Signature enveloppe中(读者拦截器可以在进一步处理之前验证签名),
  • 添加缓存控制标头

例如:

@Override
void aroundWriteTo(WriterInterceptorContext ctx) ... {
    OutputStream old = ctx.getOutputStream();
    GZIPOutputStream gzipOutputStream = new GZIPOutputStream(old);
    ctx.setOutputStream(gzipOutputStream);
    updateHeaders(ctx);
    try {
        ctx.proceed();
    } finally {
        gzipOutputStream.finish();
        ctx.setOutputStream(old);
    }
}

(上面的代码来自JAX-RS 2.0规范,第6.3节)

HTH。