当前位置: 首页 > 知识库问答 >
问题:

Kotlin/Java发送Gzip流响应

皇甫智明
2023-03-14

我试图发送一个包含压缩(gzip)流输出的响应。我当前的代码是:

@Path("/")
@Get
@Produces(MediaType.APPLICATION_JSON)
fun testRessource() : Response {
   val streamingOutput = TestOutputStream()
   val gzipStreamingOutput = CompressedHttpOutputStream(streamingOutput)
   val response = Response.ok(gzipStreamingOutput)
   response.setHeader("Content-Encoding", "gzip")

   return response
}

class TestOutputStream() : StreamingOutput {
   override fun write(outputStream: OutputStream) {
       val writer = BufferedWriter(OutputStreamWriter(outputStream))
       writer.write("{ "id" : 5 }")
       writer.flush()
   }
}


class CompressedHttpOutputStream(private val streamingOutput: StreamingOutput) : StreamingOutput {
    override fun write(outputStream: OutputStream) {
        val os = GZIPOutputStream(outputStream)
        streamingOutput.write(os)
        os.finish()
    }
}

当我请求这项服务时,我的浏览器中会出现乱七八糟的数据。尽管我的响应正确设置了以下标题,但似乎我遗漏了什么:内容编码:gzip和传输编码:chunked。

在我的单元测试中,如果我提取主体并通过GzipInputStream()读取它,我就能够检索json主体。

当我更换时:

val os=gzip输出流(outputStream)

具有

val os=DeflaterOutputStream(outputStream)和内容编码:deflate

输出正确解压缩为json。

我正在使用Quarkus2.6.0。最终。

感谢您的帮助和见解!

共有1个答案

史逸春
2023-03-14

没关系,不需要CompressedHttpOutputStream。Quakus实现了对其余endpoint的gzip支持。

我只需要向endpoint和quarkus添加注释。放松。gzip。在应用程序中,enabled=true。属性。

 类似资料:
  • 我有一个无法更改的外部接口: 我需要开始使用数据,并将其发送到< code>flow。数据顺序是必须的。我想要一个冷< code >流,但是我找不到一个具有< code>emit函数的冷< code >流版本,所以我使用热< code >流重放设置为最大值作为解决方法。这是我的第一次尝试: 不幸的是,它不起作用,因为 函数是一个挂起的函数。但是,这是一个外部接口,我无法添加挂起修饰符。我也试图做这

  • 问题内容: 我试图用gzip发送文本,但我不知道如何发送。在示例中,代码使用fs,但是我不想发送文本文件,而只是发送字符串。 问题答案: 你在那儿。我可以衷心地同意,该文档还不足以使您了解如何执行此操作。 一个简化就是不使用;。 …似乎默认情况下会发送UTF-8。但是,当没有默认行为比其他行为更有意义并且我无法立即通过文档进行确认时,我个人宁愿走安全的道路。 同样,如果您需要传递JSON对象,则可

  • 有人能告诉我如何从Java中的HTTP触发器Azure函数发送pdf响应吗。 一旦该功能被触发,我需要从Azure存储中读取pdf,并将pdf作为响应返回到浏览器。

  • 我正在向我的远程服务器发送以将其存储在文件系统中。为此,我使用Java协议。为了避免网络带宽和TCP输入/输出缓冲内存,我以压缩格式发送数据。但是,我无法解压缩从客户端收到的数据。我得到了ZLIB输入流的异常。这是因为服务器正在接收。 Java代码 客户 服务器 有没有办法在Socket中以GZIP压缩格式发送数据?

  • 我正在尝试使用Netty编写RTSP服务器。 现在,客户端发送请求 我想发回以下回复 我应该使用什么来构造http响应。我应该使用HttpResponse还是只使用普通字节数组并将其转换为ByteBuf? 我使用的Netty版本是4.1.5 提前谢谢。

  • 我想知道,即使没有消息发送给任何朋友,为什么成功对象返回?