diff --git a/spring-web/src/main/java/org/springframework/http/codec/multipart/MultipartHttpMessageWriter.java b/spring-web/src/main/java/org/springframework/http/codec/multipart/MultipartHttpMessageWriter.java index 62907ec3e22..50e9a264d1a 100644 --- a/spring-web/src/main/java/org/springframework/http/codec/multipart/MultipartHttpMessageWriter.java +++ b/spring-web/src/main/java/org/springframework/http/codec/multipart/MultipartHttpMessageWriter.java @@ -149,7 +149,9 @@ public class MultipartHttpMessageWriter extends MultipartWriterSupport /** * Set the character set to use for part headers such as * "Content-Disposition" (and its filename parameter). - *

By default this is set to "UTF-8". + *

By default this is set to "UTF-8". If changed from this default, + * the "Content-Type" header will have a "charset" parameter that specifies + * the character set used. */ public void setCharset(Charset charset) { Assert.notNull(charset, "Charset must not be null"); diff --git a/spring-web/src/main/java/org/springframework/http/codec/multipart/MultipartWriterSupport.java b/spring-web/src/main/java/org/springframework/http/codec/multipart/MultipartWriterSupport.java index d7cf5181219..0ddae070e04 100644 --- a/spring-web/src/main/java/org/springframework/http/codec/multipart/MultipartWriterSupport.java +++ b/spring-web/src/main/java/org/springframework/http/codec/multipart/MultipartWriterSupport.java @@ -102,7 +102,11 @@ public class MultipartWriterSupport extends LoggingCodecSupport { params.putAll(mediaType.getParameters()); } params.put("boundary", new String(boundary, StandardCharsets.US_ASCII)); - params.put("charset", getCharset().name()); + Charset charset = getCharset(); + if (!charset.equals(StandardCharsets.UTF_8) && + !charset.equals(StandardCharsets.US_ASCII) ) { + params.put("charset", getCharset().name()); + } mediaType = (mediaType != null ? mediaType : MediaType.MULTIPART_FORM_DATA); mediaType = new MediaType(mediaType, params); diff --git a/spring-web/src/test/java/org/springframework/http/codec/multipart/MultipartHttpMessageWriterTests.java b/spring-web/src/test/java/org/springframework/http/codec/multipart/MultipartHttpMessageWriterTests.java index a412102f9c2..167b300fd37 100644 --- a/spring-web/src/test/java/org/springframework/http/codec/multipart/MultipartHttpMessageWriterTests.java +++ b/spring-web/src/test/java/org/springframework/http/codec/multipart/MultipartHttpMessageWriterTests.java @@ -190,7 +190,7 @@ public class MultipartHttpMessageWriterTests extends AbstractLeakCheckingTests { assertThat(contentType.isCompatibleWith(mediaType)).isTrue(); assertThat(contentType.getParameter("type")).isEqualTo("foo"); assertThat(contentType.getParameter("boundary")).isNotEmpty(); - assertThat(contentType.getParameter("charset")).isEqualTo("UTF-8"); + assertThat(contentType.getParameter("charset")).isNull(); MultiValueMap requestParts = parse(this.response, hints); assertThat(requestParts.size()).isEqualTo(2);