Update Content-Length if body changed by client interceptor

Prior to this commit, the HTTP interceptor model used for `RestTemplate`
and `RestClient` would not update the "Content-Length" request header,
even when the request body had been updated by a
`ClientHttpRequestInterceptor`.

Even though this is the `ClientHttpRequestInterceptor`'s responsibility
(along with the content type and encoding changes if needed), this
would result in invalid requests. This invalid situation can be detected
by `InterceptingClientHttpRequest`.

This commit ensures that such situations are detected and fixed
automatically by setting the Content-Length header to the actual body
size, right before executing the actual request, after all interceptors
are done.

Closes gh-33459
This commit is contained in:
zhoukq
2024-09-01 18:48:11 +08:00
committed by Brian Clozel
parent be5d5fa52d
commit aca264942d
2 changed files with 5 additions and 0 deletions

View File

@@ -204,6 +204,7 @@ class InterceptingClientHttpRequestFactoryTests {
ClientHttpRequest request = requestFactory.createRequest(URI.create("https://example.com"), HttpMethod.GET);
request.execute();
assertThat(Arrays.equals(changedBody, requestMock.getBodyAsBytes())).isTrue();
assertThat(requestMock.getHeaders().getContentLength()).isEqualTo(changedBody.length);
}