Dropwizard:return 压缩结果

Dropwizard: return compressed result

我使用 dropwizard 并想 return 从我的服务器压缩结果。我该怎么做?

我有以下代码:

@GET
@Timed
@UnitOfWork
public EntityResponse getOutput(@QueryParam(value = "encode") String encode,@Context HttpServletResponse response) {
    response.setHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON);
    if (StringUtils.isNotEmpty(encode)) {
        response.setHeader(HttpHeaders.CONTENT_ENCODING, "gzip");
    }
    return EntityResponse.success("result string");
}

我使用一些休息客户端,当我测试这个端点时,当 encode 参数不为空时,我看到 NO CONTENT。也许我 return 回复错误,可以帮助我吗?

编辑: 我尝试根据 Chrome 提出请求并收到 This site can’t be reached ... might be temporarily down or it may have moved permanently to a new web address. ERR_CONTENT_DECODING_FAILED

您不需要手动执行此操作。只需在您的 Dropwizard Yaml 中启用 gzip 压缩并改用它。如果启用,所有在 Accept-Content-Encoding header 中带有 gzip 的请求将自动将其响应实体用 gzip 编码。参见 http://www.dropwizard.io/0.9.1/docs/manual/configuration.html#gzip

此外,您也不必手动设置内容编码 header。只需将 @Produces(MediaType.APPLICATION_JSON) 作为注释添加到您的方法中即可。

您现在可以删除方法中处理 header 和编码的所有逻辑和参数。

代码:

@GET
@Timed
@UnitOfWork
@Produces(MediaType.APPLICATION_JSON)
public EntityResponse getOutput() {
    return EntityResponse.success("result string");
}

Yaml(最低配置):

server:
  gzip:
    bufferSize: 8KiB