我在一个非servlet容器(Netty)中运行Jersey。对于基于servlet的容器,我可以使用以下方法插入请求过滤器:
<init-param>
<param-name>com.sun.jersey.spi.container.ContainerRequestFilters</param-name>
<param-value>com.sun.jersey.api.container.filter.GZIPContentEncodingFilter</param-value>
</init-param>
但是我如何在我的情况下以编程方式执行此操作?
答案 0 :(得分:1)
这是一个完全非servlet的例子: 假设您已创建了请求和/或响应过滤器,可以按如下方式将它们添加到启动代码中: (请注意,在此示例中,ApiInterceptor类既是请求又是响应过滤器)
final URI BASE_URI = UriBuilder.fromUri("http://localhost/").port(9999).build();
System.out.println("Investigating Api services...");
ResourceConfig rc = new PackagesResourceConfig(
"path.to.your.resource.objects");
System.out.println("Registering interceptors...");
rc.getProperties().put(ResourceConfig.PROPERTY_CONTAINER_REQUEST_FILTERS, ApiInterceptor.class.getName());
rc.getProperties().put(ResourceConfig.PROPERTY_CONTAINER_RESPONSE_FILTERS, ApiInterceptor.class.getName());
Debug.print("Starting grizzly...");
GrizzlyServerFactory.createHttpServer(BASE_URI, rc);
Debug.print("The app started @", BASE_URI.toString());
Debug.print("Enjoy!");
System.in.read();
答案 1 :(得分:0)
不确定Netty,但对于Grizzly来说:
.....
webServer = new GrizzlyWebServer(getPort(8080), ".", true);
// add Jersey resource servlet
ServletAdapter jerseyAdapter = new ServletAdapter();
jerseyAdapter.addInitParameter("com.sun.jersey.config.property.packages", "com.your.resources.package");
jerseyAdapter.setContextPath("/");
jerseyAdapter.setServletInstance(new ServletContainer());
// add the Container filter
jerseyAdapter.addInitParameter(ResourceConfig.PROPERTY_CONTAINER_REQUEST_FILTERS, GZIPContentEncodingFilter.class.getName());
webServer.addGrizzlyAdapter(jerseyAdapter, new String[]{"/"});
try {
// start Grizzly embedded server //
System.out.println(String.format("Jersey app started with WADL at %sapplication.wadl", BASE_URI));
webServer.start();
} catch (Exception ex) {
System.out.println(ex.getMessage());
}