RestEasy:javax.ws.rs.ProcessingException:GZIP 输入超过最大大小:10000000

RestEasy : javax.ws.rs.ProcessingException: GZIP input exceeds max size: 10000000

我正在尝试阅读大量回复。我收到此错误 "javax.ws.rs.ProcessingException: RESTEASY003357: GZIP input exceeds max size: 10000000"

我们正在使用 jaxrs WebTarget 调用休息服务。如果响应很小,一切正常。如果响应很大,我会收到此错误。

javax.ws.rs.core.Response response = webTarget
            .register(CustomAcceptEncodingGZIPFilter.class,999999998)
            .register(new CustomGZIPDecodingInterceptor(999999999),999999999)
            .register(CustomGZIPEncodingInterceptor.class, 999999997)
            .path(path)
            .request()
            .header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
            .header(HttpHeaders.ACCEPT, MediaType.APPLICATION_JSON)
            .get();

我按照 https://docs.jboss.org/resteasy/docs/3.5.1.Final/userguide/html/gzip.html 尝试了解决方案。 不过,我还是无法解决这个问题。

我收到 200 响应代码,但是在读取响应实体时我收到此异常。 异常跟踪

javax.ws.rs.ProcessingException: RESTEASY003357: GZIP input exceeds max size: 10000000
    at org.jboss.resteasy.plugins.interceptors.GZIPDecodingInterceptor$FinishableGZIPInputStream.read(GZIPDecodingInterceptor.java:87)
    at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:284)
    at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:326)
    at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:178)
    at java.io.InputStreamReader.read(InputStreamReader.java:184)
    at java.io.Reader.read(Reader.java:140)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)

谢谢

在 servlet 上下文中添加此参数 "resteasy.gzip.max.input" 解决了问题。

servletContext.setInitParameter("resteasy.gzip.max.input",
                    String.valueOf(Integer.MAX_VALUE));

因为我没有 servlet 上下文,所以我正在使用 :

webTarget.register(new GZIPDecodingInterceptor(maxCompressedSize));

我的情况我用的是maxCompressedSize=Integer.MAX_VALUE,可能有点高。该值应根据预期的压缩内容大小进行调整。