Jersey 如何将拦截器和过滤器应用于Weblogic 12c上的restful服务
我知道Weblogic 12c v12.2.1使用Jersey作为JAX-RS实现。因此,我按照上的说明进行了操作,但无论是使用名称绑定还是动态绑定(即,所述链接中的更多信息),我都没有成功声明拦截器 我的应用程序工作正常,因为我实际上可以调用restful服务,但我不能应用过滤器或拦截器,它们从来没有参与过这个过程 我根本没有编辑web.xml,我只有一个Jersey 如何将拦截器和过滤器应用于Weblogic 12c上的restful服务,jersey,weblogic,jax-rs,weblogic12c,jersey-2.0,Jersey,Weblogic,Jax Rs,Weblogic12c,Jersey 2.0,我知道Weblogic 12c v12.2.1使用Jersey作为JAX-RS实现。因此,我按照上的说明进行了操作,但无论是使用名称绑定还是动态绑定(即,所述链接中的更多信息),我都没有成功声明拦截器 我的应用程序工作正常,因为我实际上可以调用restful服务,但我不能应用过滤器或拦截器,它们从来没有参与过这个过程 我根本没有编辑web.xml,我只有一个javax.ws.rs.core.Application子类 @ApplicationPath("rs") public class MyA
javax.ws.rs.core.Application
子类
@ApplicationPath("rs")
public class MyApp extends Application {
private Set<Object> singletons = new HashSet<Object>();
private Set<Class<?>> empty = new HashSet<Class<?>>();
public MyApp() {
singletons.add(new MyService());
}
@Override
public Set<Class<?>> getClasses() {
return empty;
}
@Override
public Set<Object> getSingletons() {
return singletons;
}
}
我有一个空的@Path
值,因为我不能排除它,我已经在MyApp类中指定了我的路径,我不想指定该类的路径
我的装订课
import javax.ws.rs.container.DynamicFeature;
import javax.ws.rs.container.ResourceInfo;
import javax.ws.rs.core.FeatureContext;
import com.mycompany.ws.filters.GZIPCompressor;
public class GzipDynamicBinder implements DynamicFeature {
@Override
public void configure(ResourceInfo resourceInfo, FeatureContext context) {
context.register(GZIPCompressor.class);
}
}
我的拦截器类
import java.io.IOException;
import java.util.zip.GZIPInputStream;
import java.util.zip.GZIPOutputStream;
import javax.ws.rs.WebApplicationException;
import javax.ws.rs.ext.ReaderInterceptor;
import javax.ws.rs.ext.ReaderInterceptorContext;
import javax.ws.rs.ext.WriterInterceptor;
import javax.ws.rs.ext.WriterInterceptorContext;
public class GZIPCompressor implements WriterInterceptor, ReaderInterceptor {
@Override
public Object aroundReadFrom(ReaderInterceptorContext context) throws IOException, WebApplicationException {
System.out.println(">>> Compression Reader <<<");
context.setInputStream(new GZIPInputStream(context.getInputStream()));
return context.proceed();
}
@Override
public void aroundWriteTo(WriterInterceptorContext context) throws IOException, WebApplicationException {
System.out.println(">>> Compressor Writer <<<");
context.setOutputStream(new GZIPOutputStream(context.getOutputStream()));
context.proceed();
}
}
import java.io.IOException;
导入java.util.zip.gzip输入流;
导入java.util.zip.GZIPOutputStream;
导入javax.ws.rs.WebApplicationException;
导入javax.ws.rs.ext.ReaderInterceptor;
导入javax.ws.rs.ext.ReaderInterceptorContext;
导入javax.ws.rs.ext.WriterInterceptor;
导入javax.ws.rs.ext.WriterInterceptorContext;
公共类GZIPCompressor实现WriterInterceptor、ReaderInterceptor{
@凌驾
ReadFrom周围的公共对象(ReaderInterceptorContext上下文)引发IOException、WebApplicationException{
System.out.println(“>>>压缩读取器压缩写入器
WeblogicJAX-RS版本是1.1(我在任何地方都找不到过滤器或拦截器的概念)
WeblogicJersey版本是1.17,我参考了最新版本的文档,目前是2.6
我认为这里缺少的是GZIPCompressor类中的@Provider注释。添加该注释应确保侦听器被调用。
查看这篇博客文章,了解应用拦截器的详细步骤-这是如何回答这个问题的?
import java.io.IOException;
import java.util.zip.GZIPInputStream;
import java.util.zip.GZIPOutputStream;
import javax.ws.rs.WebApplicationException;
import javax.ws.rs.ext.ReaderInterceptor;
import javax.ws.rs.ext.ReaderInterceptorContext;
import javax.ws.rs.ext.WriterInterceptor;
import javax.ws.rs.ext.WriterInterceptorContext;
public class GZIPCompressor implements WriterInterceptor, ReaderInterceptor {
@Override
public Object aroundReadFrom(ReaderInterceptorContext context) throws IOException, WebApplicationException {
System.out.println(">>> Compression Reader <<<");
context.setInputStream(new GZIPInputStream(context.getInputStream()));
return context.proceed();
}
@Override
public void aroundWriteTo(WriterInterceptorContext context) throws IOException, WebApplicationException {
System.out.println(">>> Compressor Writer <<<");
context.setOutputStream(new GZIPOutputStream(context.getOutputStream()));
context.proceed();
}
}