微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

客户端的pako与服务器端的java

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

问题可能在于输入流的编码,但我无法弄清楚如何解决我的问题.我测试了很多解决方案,但都没有.

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

[31, -62, -117, 8, 0, 0, 0, 0...

我究竟做错了什么?

Angular的一部分

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();

 }
}

解决方法:

终于找到了解决方案:

– 不需要encodeURIComponent

– 使用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)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐