0

gzipされたコンテンツを出力したいRESTメソッドがあります。私が追加しました

 <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のサーブレットへ

デバッグにより、コードが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();

    }
4

2 に答える 2

3

クライアントリクエストのヘッダーパラメータに依存すると思います。
リクエストに「gzip」を含むAccept-Encodingヘッダーが含まれている場合 、レスポンスエンティティ(存在する場合)はgzipを使用して圧縮され、「gzip」のContent-Encodingヘッダーがレスポンスに追加されます。

参照: http: //jersey.java.net/nonav/apidocs/latest/jersey/com/sun/jersey/api/container/filter/GZIPContentEncodingFilter.html

于 2013-01-17T10:33:47.180 に答える
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)のcompression="on"。

于 2015-06-30T12:15:57.023 に答える