gpt4 book ai didi

java - Gzip 格式解压缩 - Jersey

转载 作者:行者123 更新时间:2023-12-01 12:36:28 25 4
gpt4 key购买 nike

我将 Json 压缩为 Gzip 格式并发送如下:

connection.setDoOutput(true); // sets POST method implicitly
connection.setRequestProperty("Content-Type", "application/json");
connection.setRequestProperty("Content-Encoding", "gzip");

final byte[] originalBytes = body.getBytes("UTF-8");
final ByteArrayOutputStream baos = new ByteArrayOutputStream(originalBytes.length);
final ByteArrayEntity postBody = new ByteArrayEntity(baos.toByteArray());
method.setEntity(postBody);

我想接收 Post 请求并将其解压缩为字符串。为此我应该使用什么 @Consumes 注释。

最佳答案

您可以对资源类透明地处理 gzip 编码,例如 described in the docmentation使用ReaderInterceptor。拦截器可能如下所示:

@Provider
public class GzipReaderInterceptor implements ReaderInterceptor {

@Override
public Object aroundReadFrom(ReaderInterceptorContext context) throws IOException, WebApplicationException {
if ("gzip".equals(context.getHeaders().get("Content-Encoding"))) {
InputStream originalInputStream = context.getInputStream();
context.setInputStream(new GZIPInputStream(originalInputStream));
}
return context.proceed();
}

}

对于您的资源类,gzip 压缩是透明的。它仍然可以使用 application/json。您也不需要处理字节数组,只需像通常那样使用 POJO:

@POST
@Consumes(MediaType.APPLICATION_JSON)
public Response post(Person person) { /* */ }

一个问题也可能是您的客户端代码。我不确定您是否真的对帖子正文进行了 gzip 压缩,因此这里是一个完整的示例,它使用 URLConnection 发布 gzip 压缩的实体:

String entity = "{\"firstname\":\"John\",\"lastname\":\"Doe\"}";

ByteArrayOutputStream baos = new ByteArrayOutputStream();
GZIPOutputStream gzos = new GZIPOutputStream(baos);
gzos.write(entity.getBytes("UTF-8"));
gzos.close();

URLConnection connection = new URL("http://whatever").openConnection();
connection.setDoOutput(true);
connection.setRequestProperty("Content-Type", "application/json");
connection.setRequestProperty("Content-Encoding", "gzip");
connection.connect();
baos.writeTo(connection.getOutputStream());

关于java - Gzip 格式解压缩 - Jersey,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25542450/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com