在JAX-RS标准中,过滤器Filter是JAX-RS API的组成部分,主要用于操作HTTP请求或响应的Headers, Methods和URI等参数。而拦截器Interceptor作为JAX-RS extension API的组成部分,主要操作HTTP请求或响应的Body中的Entity数据流,如对Entity数据流进行压缩/解压缩,JSON格式与Java对象之间的转换等。可以说,在JAX-RS标准中,拦截器Interceptor是对过滤器Filter的补充,两者各司其职。
关于的用法,详见Jersey的过滤器详解,本文聚焦在Jersey的拦截器。
1. 在JAX-RS extension API(也称为SPI)提供了2个拦截器相关的接口
- javax.ws.rs.ext.ReaderInterceptor,在读取HTTP Body之前被拦截处理
在服务端操作HTTP请求的Entity,如对HTTP请求Body中的Entity进行处理。
在客户端操作HTTP响应的Entity,如对HTTP响应Body中的Entity进行处理。
- javax.ws.rs.ext.WriterInterceptor,在写入HTTP Body之前被拦截处理
在服务端操作HTTP响应的Entity,然后将处理后的内容封装到HTTP响应的Body中。
在客户端操作HTTP请求的Entity,然后将处理后的内容封装到HTTP请求的Body中。
2. 在Jersey应用中,使拦截器Interceptor实现类生效的方式与过滤器Filter完全一致,请参考