Skip to content

Commit 83ecf5c

Browse files
royclarksonrstoyanchev
authored andcommitted
Fix issue where FormHttpMessageConverter fails to write multipart data
FormHttpMessageConverter incorrectly determines that the media type "multipart/form-data; charset=utf-8" is not multipart. This commit allows the media type to contain a charset parameter.
1 parent 7aa5e65 commit 83ecf5c

File tree

2 files changed

+3
-2
lines changed

2 files changed

+3
-2
lines changed

spring-web/src/main/java/org/springframework/http/converter/FormHttpMessageConverter.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -244,7 +244,7 @@ public void write(MultiValueMap<String, ?> map, MediaType contentType, HttpOutpu
244244

245245
private boolean isMultipart(MultiValueMap<String, ?> map, MediaType contentType) {
246246
if (contentType != null) {
247-
return MediaType.MULTIPART_FORM_DATA.equals(contentType);
247+
return MediaType.MULTIPART_FORM_DATA.includes(contentType);
248248
}
249249
for (String name : map.keySet()) {
250250
for (Object value : map.get(name)) {

spring-web/src/test/java/org/springframework/http/converter/FormHttpMessageConverterTests.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ public void canRead() {
6969
public void canWrite() {
7070
assertTrue(converter.canWrite(MultiValueMap.class, new MediaType("application", "x-www-form-urlencoded")));
7171
assertTrue(converter.canWrite(MultiValueMap.class, new MediaType("multipart", "form-data")));
72+
assertTrue(converter.canWrite(MultiValueMap.class, new MediaType("multipart", "form-data", Charset.forName("UTF-8"))));
7273
assertTrue(converter.canWrite(MultiValueMap.class, MediaType.ALL));
7374
}
7475

@@ -135,7 +136,7 @@ public String getFilename() {
135136

136137
MockHttpOutputMessage outputMessage = new MockHttpOutputMessage();
137138
converter.setMultipartCharset(Charset.forName("UTF-8"));
138-
converter.write(parts, MediaType.MULTIPART_FORM_DATA, outputMessage);
139+
converter.write(parts, new MediaType("multipart", "form-data", Charset.forName("UTF-8")), outputMessage);
139140

140141
final MediaType contentType = outputMessage.getHeaders().getContentType();
141142
assertNotNull("No boundary found", contentType.getParameter("boundary"));

0 commit comments

Comments
 (0)