Only write non-default charset in MultipartWriterSupport
This commit only writes the 'charset' parameter in the written headers if it is non-default (not UTF-8), since RFC7578 states that the only allowed parameter is 'boundary'. Closes gh-25885
This commit is contained in:
parent
77d6f8bc00
commit
dea2029e94
|
@ -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).
|
||||
* <p>By default this is set to "UTF-8".
|
||||
* <p>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");
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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<String, Part> requestParts = parse(this.response, hints);
|
||||
assertThat(requestParts.size()).isEqualTo(2);
|
||||
|
|
Loading…
Reference in New Issue