2012-10-25 34 views
0

我有一個REST方法,我想輸出gziped內容。我已經在web.xml中添加爲什麼我的回覆在使用GZIPContentEncodingFilter時沒有壓縮

<init-param> 
     <param-name>com.sun.jersey.spi.container.ContainerResponseFilters</param-name> 
     <param-value>com.sun.jersey.api.container.filter.GZIPContentEncodingFilter</param-value> 
    </init-param> 

到servlet

我可以看到,該代碼會突破的GZIPContentEncodingFilter類的調試輸出,但沒有得到.GZIP前綴和內容沒有被壓縮,而不是這是正常的json。我正在使用澤西島1.14。

方法是這樣的:

@GET 
    @Path("/fundlight") 
    @Produces(MediaType.APPLICATION_JSON) 
    public Response getFundLightList() { 

     StopWatch watch = new StopWatch(); 
     watch.start(); 

     Collection<Object> objectResults = null; 

     objectResults = getCacheMap("FundLight").values(); 
     List<FundLight> fundLightList = new ArrayList(objectResults); 

     watch.stop(); 

     GenericEntity<List<FundLight>> entity = new GenericEntity<List<FundLight>>(fundLightList) { 
     }; 


     ResponseBuilder builder = Response.ok(entity); 
     return builder.build(); 

    } 

回答

0

最簡單的方法就是註冊GZIPEncoder和EncodingFilter:

public class MyApplication extends Application { 
    @Override 
    public Set<Class<?>> getClasses() { 
     final Set<Class<?>> classes = new HashSet<>(); 

     classes.add(GZipEncoder.class); // this allows gzipped requests and responses 
     classes.add(EncodingFilter.class); // this enables any registered encoders 

     return classes; 
    } 
} 

現在您的服務器端可以處理與「內容編碼:gzip」請求,並在響應客戶端gzip壓縮請求的頭部有一個「Accept-Encoding:gzip」。

你也可以通過配置告訴你的tomcat/apache /無論做什麼響應壓縮。例如。在server.xml的連接器(Tomcat 7)中壓縮=「on」。

相關問題