客户端为pako,服务器端为java

客户端为pako,服务器端为java,java,angular,rest,gzip,Java,Angular,Rest,Gzip,我试图在angular应用程序中使用(.js)压缩Post的有效负载,并通过rest通信在Java后端应用程序中获得答案。 在后端,我编写了一个拦截器,并尝试通过GZIPInputStream解压请求。但是,我总是有一个“不在GZIP格式”的消息 问题可能在inputstream的编码中,但我不知道如何解决我的问题。我测试了许多解决方案,但都不起作用 如果我查看输入流的字节[],这是第一个索引 [31, -62, -117, 8, 0, 0, 0, 0... 我做错了什么 角部 var sti

我试图在angular应用程序中使用(.js)压缩Post的有效负载,并通过rest通信在Java后端应用程序中获得答案。 在后端,我编写了一个拦截器,并尝试通过GZIPInputStream解压请求。但是,我总是有一个“不在GZIP格式”的消息

问题可能在inputstream的编码中,但我不知道如何解决我的问题。我测试了许多解决方案,但都不起作用

如果我查看输入流的字节[],这是第一个索引

[31, -62, -117, 8, 0, 0, 0, 0...
我做错了什么

角部

var stingtogzip = encodeURIComponent(JSON.stringify(criteria));
var gzipstring= pako.gzip(stingtogzip , { to : 'string'});

options.headers = new Headers();
 options.headers.append("Content-Encoding","gzip");
options.body = gzipstring;
options.method = 'POST';
return this.http.request(req, options)
拦截器代码:

@Provider
public class GZIPReaderInterceptor implements ReaderInterceptor {
     public Object aroundReadFrom(ReaderInterceptorContext ctx)
         throws IOException {
            String encoding = ctx.getHeaders().getFirst("Content-Encoding");
            if (!"gzip".equalsIgnoreCase(encoding)) {
                return ctx.proceed();
            }

            InputStream   gzipInputStream = new GZIPInputStream(ctx.getInputStream());
            ctx.setInputStream(gzipInputStream);
                return ctx.proceed();

 }
}

最后找到解决方案:

-不需要任何组件

-使用Blob将数据传输到服务器

var stingtogzip = JSON.stringify(criteria);
var gzipstring= pako.gzip(stingtogzip);
var blob = new Blob([gzipString]);
options.headers = new Headers();
options.headers.append("Content-Encoding","gzip");
options.body = blob;
options.method = 'POST';
return this.http.request(req, options)

在我的例子中,必须使用字符集=x-user-defined-binary的内容类型标题:

const gzip = pako.gzip(jsonString);
const blob = new Blob([gzip]);

const headers = new Headers({
   'Content-Type': 'application/json; charset=x-user-defined-binary',
   'Content-Encoding': 'gzip'
});

const reqOptions = new RequestOptions({ headers: headers });

return this.http.put('URL', blob, reqOptions)
   .map(this.extractJSON)
   .catch((err) => this.httpErrorHandler.handleError(err));