我了解 Weblogic 12c v12.2.1 使用 Jersey 作为 JAX-RS 实施。所以我按照this page上的说明操作,但是我无法通过使用名称绑定或动态绑定来声明拦截器(即更多信息)提到的链接)
我的应用程序正常运行,因为我实际上可以调用其余的服务,但是我不能应用过滤器或拦截器,它们从不参与过程。
我根本没有编辑 web.xml ,我只有一个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;
}
}
MyService类看起来像这样
@Path("")
@Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
public class MyService {
private static final Logger log = Logger.getLogger(MyService.class);
@GET
@Path("login")
public Status login(@QueryParam(USERNAME_PARAM) String username, @QueryParam(PASSWORD_PARAM) String password, @Context HttpServletRequest request) {
return new Status(ServiceMessages.USER_AUTHENTICATION_SUCCESS);
}
我有一个空的@Path
值,因为我无法排除它,我已经在 MyApp 课程中指定了我的路径而且我不会#39; t指定此类的路径。
我的约束类
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();
}
}
我感谢所有答案,但我真的很喜欢与 web.xml 文件无关的答案。
答案 0 :(得分:0)
答案 1 :(得分:0)
我认为你在这里缺少的是GZIPCompressor类中的@Provider注释。添加它应该确保调用拦截器。 查看此博客文章,了解有关应用拦截器的详细步骤 - http://stick2code.blogspot.in/2015/02/performing-gzip-compression-in-jaxrs-20.html