我有一个REST方法,我想输出gziped内容。我添加了
<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>
到web.xml中的servlet
我可以通过调试看到代码通过GZIPContentEncodingFilter类,但是输出没有得到.gzip前缀,内容没有被压缩,而是正常的json。我正在使用Jersey 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 :(得分:3)
我认为这取决于客户端请求标头参数。
如果请求包含包含“gzip”的Accept-Encoding标头,则使用gzip压缩响应实体(如果有),并将“gzip”的Content-Encoding标头添加到响应中。
答案 1 :(得分: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;
}
}
现在,您的服务器端可以使用“Content-Encoding:gzip”处理请求,并在客户端请求的标头具有“Accept-Encoding:gzip”时响应gzip。
你也可以通过配置告诉你的tomcat / apache /做什么响应压缩。例如。在您的server.xml的连接器(Tomcat 7)中压缩=“on”。