Copy headers from part in MultipartBodyBuilder

This commit makes sure that Part.headers() is copied over when adding a
part in the MultipartBodyBuilder.

Closes gh-26410
This commit is contained in:
Arjen Poutsma
2021-01-21 16:24:59 +01:00
parent daa5465003
commit e537844a09
2 changed files with 12 additions and 6 deletions

View File

@@ -37,6 +37,7 @@ import org.springframework.core.io.buffer.DataBufferUtils;
import org.springframework.core.io.buffer.DefaultDataBufferFactory;
import org.springframework.core.testfixture.io.buffer.AbstractLeakCheckingTests;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.http.client.MultipartBodyBuilder;
import org.springframework.http.codec.ClientCodecConfigurer;
@@ -102,8 +103,12 @@ public class MultipartHttpMessageWriterTests extends AbstractLeakCheckingTests {
this.bufferFactory.wrap("Cc".getBytes(StandardCharsets.UTF_8))
);
FilePart mockPart = mock(FilePart.class);
HttpHeaders partHeaders = new HttpHeaders();
partHeaders.setContentType(MediaType.TEXT_PLAIN);
partHeaders.setContentDispositionFormData("filePublisher", "file.txt");
partHeaders.add("foo", "bar");
given(mockPart.headers()).willReturn(partHeaders);
given(mockPart.content()).willReturn(bufferPublisher);
given(mockPart.filename()).willReturn("file.txt");
MultipartBodyBuilder bodyBuilder = new MultipartBodyBuilder();
bodyBuilder.part("name 1", "value 1");
@@ -166,6 +171,7 @@ public class MultipartHttpMessageWriterTests extends AbstractLeakCheckingTests {
part = requestParts.getFirst("filePublisher");
assertThat(part.name()).isEqualTo("filePublisher");
assertThat(part.headers()).containsEntry("foo", Collections.singletonList("bar"));
assertThat(((FilePart) part).filename()).isEqualTo("file.txt");
value = decodeToString(part);
assertThat(value).isEqualTo("AaBbCc");