如何禁用自动GZIP以获得响应

时间:2018-03-20 15:47:30

标签: spark-java

正如我从Spark documentation了解到的那样,如果GZIP包含带有 gzip 值的 Content-Encoding 标头,则会自动完成回复。

我有以下代码:

post("/test", (req, res) -> byteArray);

如果已使用GZIP压缩byteArray怎么办?然后Spark会再次压缩它,客户端会收到垃圾。

有没有办法在没有Spark自动压缩的情况下使用GZIP进行响应?

2 个答案:

答案 0 :(得分:2)

  

有没有办法在没有Spark自动压缩的情况下使用GZIP进行响应?

不幸的是没有。您可以使用基础HttpServletResponse上的编写者直接编写您的回复。

post("/test", (req, res) -> { 
    res.raw().getWriter(); // do something with this writer 
    return "";
);

虽然不是很漂亮。

答案 1 :(得分:0)

不可能退出Spark的自动GZIP压缩。

一个怪异的解决方法是将InputStream包装在GZIPInputStream中,然后从您的控制器方法返回它:

return new GZIPInputStream(myInputStream);

巨大的注意事项::这将浪费CPU周期,实际上是无操作地解压缩和重新压缩流,但是鉴于Spark没有选择退出,它可以用作临时选项解决方法。

我鼓励遇到此问题的任何人在Spark 3 feature request thread中提出功能请求。