我試圖使用Tomcat 7和名稱綁定工作來獲得Jersey 2.3攔截器示例found here。我創建了以下按在鏈接中所示的例子...Jersey 2.3攔截器示例不工作
@NameBinding
@Retention(RetentionPolicy.RUNTIME)
public @interface Compress{}
和
@Compress
public class GZIPWriterInterceptor implements WriterInterceptor {
@Override
public void aroundWriteTo(WriterInterceptorContext context) throws IOException, WebApplicationException {
final OuputStream outputStream .....
..some logging added here..
}
和
@Path("helloword")
public class HelloWorldResource {
@GET
@Path("to-much-data")
@Compress
public String getVeryLongString(){
String str = "a very ...
..... large string";
return str;
}
}
我還沒有添加任何額外的網絡.xml註冊Interceptor,因爲這在用戶指南文檔中沒有討論。我注意到這是澤西島版本中使用的方法。
我測試了壓縮攔截器是否使用了從澤西客戶端api構建的客戶端。我確保在發送請求之前將HttpHeaders.ACCEPT_ENCODING, "gzip"
標題添加到Invocation.Builder
。我還將日誌記錄添加到GZIPWriterInterceptor
。當我測試以查看響應是否壓縮時,它會以純文本形式返回(Content-Type - text/plain
設置在響應頭中),並且在日誌中看不到GZIPWriterInterceptor
消息。
有沒有人有任何想法我做錯了什麼,或者我可以嘗試什麼?
編輯 - 我更新了我的web.xml,嘗試註冊GZIPWriterInterceptor類。
......
.
<servlet>
<servlet-name>Jersey Test Servlet</servlet-name>
<servlet-value>org.glassfish.jersey.servlet.ServletContainer</servlet-value>
<init-param>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>com.test.jersey</param-value>
</init-param>
<init-param>
<param-name>com.ws.rs.ext.WriterInterceptor</param-name>
<param-value>com.test.jersey.GZIPWriterInterceptor</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
.
.......
這沒有奏效。註冊GZIPWriterInterceptor的參數名稱是WriterInterceptor還是別的?
UPDATE - 我已經成功地得到壓縮通過擴展javax.ws.rs.core.Application並註冊爲discribed每個類我需要(HelloWorldResource.class,GZIPWriterInterceptor.class,Compress.class)工作在部署不可知應用程序模型found here中。
我註冊了我的應用程序類在web.xml ...
<display-name>JerseyInterceptorTest2</display-name>
<servlet>
<servlet-name>Jersey Rest Test</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>javax.ws.rs.Application</param-name>
<param-value>com.jersey.test.MyApplication</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Jersey Rest Test</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
我曾嘗試通過延長ResourceConfig按照例4.2註冊我的包。並通過更早的方法通過web.xml
<init-param>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>com.test.jersey</param-value>
</init-param>
它仍然不清楚爲什麼包註冊不起作用。
感謝Michal,我添加了@Compress並更新了web.xml以包含我認爲需要註冊的GZIPWriterInterceptor。我將添加此作爲編輯我的原始問題。 –
你的參數名稱是錯誤的。它應該是'jersey.config.server.provider.classnames'而不是'com.ws.rs.ext.WriterInterceptor'。 –
我已經在web.xml中。我正在使用包來註冊提供者。 –