Spring RestTemplate Gzip响应缺少Content-Length标头

时间:2019-02-04 15:51:14

标签: spring spring-boot http http-headers content-length

我正在使用Spring Boot集成到可以提供压缩响应的第三方,并且我想记录压缩响应正文与解压缩后响应的大小,以便我们可以审核帐单等。

我正在使用RestTemplate.exchange发出GET请求,并且响应正确返回,但是我无法在响应中检索Content-Length标头。

我知道第三方正在将其发回,因为当我使用Curl发出相同的请求时,我可以看到它:

HTTP/1.1 200 OK
Date: Mon, 04 Feb 2019 15:40:10 GMT
Server: Apache
Vary: Accept-Encoding
Content-Encoding: gzip
Content-Length: 558
Connection: close
Content-Type: application/json

这是我的Java代码发出请求并记录长度:

final ResponseEntity<String> responseEntity = restTemplate.exchange(url, GET, entity, String.class);
final String body = responseEntity.getBody();
LOG.info("Payload sizes: compressed={}, uncompressed={}", responseEntity.getHeaders().getContentLength(), body.length());

对于请求标头,我根据第三方文档设置了“ Accept-Encoding:gzip,deflate”。但是,当我得到响应时,对getContentLength()的调用仅返回-1。我对此进行了很多搜索,并尝试使用ClientHttpRequestInterceptor,但没有任何乐趣。

有人遇到过同样的问题吗?

1 个答案:

答案 0 :(得分:0)

以防万一有人遇到和我一样的问题,如果您使用的是 TestRestTemplate,它在 gzip 时不会显示 Content-Encode,请尝试改用 RestTemplate