Skip to content

Commit 4e7d8a8

Browse files
committed
Introduce addSupportedMediaType() in FormHttpMessageConverter
Closes gh-23203
1 parent 8e1cb9a commit 4e7d8a8

File tree

2 files changed

+51
-14
lines changed

2 files changed

+51
-14
lines changed

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

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,7 @@
8888
* @author Arjen Poutsma
8989
* @author Rossen Stoyanchev
9090
* @author Juergen Hoeller
91+
* @author Sam Brannen
9192
* @since 3.0
9293
* @see org.springframework.http.converter.support.AllEncompassingFormHttpMessageConverter
9394
* @see org.springframework.util.MultiValueMap
@@ -127,9 +128,23 @@ public FormHttpMessageConverter() {
127128

128129
/**
129130
* Set the list of {@link MediaType} objects supported by this converter.
131+
* @see #addSupportedMediaType(MediaType)
132+
* @see #getSupportedMediaTypes()
130133
*/
131134
public void setSupportedMediaTypes(List<MediaType> supportedMediaTypes) {
132-
this.supportedMediaTypes = supportedMediaTypes;
135+
Assert.notNull(supportedMediaTypes, "'supportedMediaTypes' must not be null");
136+
// Ensure internal list is mutable.
137+
this.supportedMediaTypes = new ArrayList<>(supportedMediaTypes);
138+
}
139+
140+
/**
141+
* Add a {@link MediaType} to be supported by this converter.
142+
* @since 5.2
143+
* @see #setSupportedMediaTypes(List)
144+
*/
145+
public void addSupportedMediaType(MediaType supportedMediaType) {
146+
Assert.notNull(supportedMediaType, "'supportedMediaType' must not be null");
147+
this.supportedMediaTypes.add(supportedMediaType);
133148
}
134149

135150
@Override

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

Lines changed: 35 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -58,36 +58,58 @@
5858
*/
5959
public class FormHttpMessageConverterTests {
6060

61+
protected static final MediaType MULTIPART_MIXED = new MediaType("multipart", "mixed");
62+
protected static final MediaType MULTIPART_RELATED = new MediaType("multipart", "related");
63+
6164
private final FormHttpMessageConverter converter = new AllEncompassingFormHttpMessageConverter();
6265

6366

6467
@Test
6568
public void canRead() {
66-
assertThat(this.converter.canRead(MultiValueMap.class, new MediaType("application", "x-www-form-urlencoded"))).isTrue();
67-
assertThat(this.converter.canRead(MultiValueMap.class, new MediaType("multipart", "form-data"))).isFalse();
69+
assertThat(this.converter.canRead(MultiValueMap.class, MediaType.APPLICATION_FORM_URLENCODED)).isTrue();
70+
assertThat(this.converter.canRead(MultiValueMap.class, MediaType.MULTIPART_FORM_DATA)).isFalse();
6871
}
6972

7073
@Test
7174
public void canWrite() {
72-
assertCanWrite(MultiValueMap.class, new MediaType("application", "x-www-form-urlencoded"));
73-
assertCanWrite(MultiValueMap.class, new MediaType("multipart", "form-data"));
74-
assertCanWrite(MultiValueMap.class, new MediaType("multipart", "form-data", StandardCharsets.UTF_8));
75-
assertCanWrite(MultiValueMap.class, MediaType.ALL);
75+
assertCanWrite(MediaType.APPLICATION_FORM_URLENCODED);
76+
assertCanWrite(MediaType.MULTIPART_FORM_DATA);
77+
assertCanWrite(new MediaType("multipart", "form-data", StandardCharsets.UTF_8));
78+
assertCanWrite(MediaType.ALL);
7679
}
7780

7881
@Test
79-
public void canWriteMultipartMixedAndMultipartRelated() {
82+
public void setSupportedMediaTypes() {
83+
assertCannotWrite(MULTIPART_MIXED);
84+
assertCannotWrite(MULTIPART_RELATED);
85+
8086
List<MediaType> supportedMediaTypes = new ArrayList<>(this.converter.getSupportedMediaTypes());
81-
supportedMediaTypes.add(new MediaType("multipart", "mixed"));
82-
supportedMediaTypes.add(new MediaType("multipart", "related"));
87+
supportedMediaTypes.add(MULTIPART_MIXED);
88+
supportedMediaTypes.add(MULTIPART_RELATED);
8389
this.converter.setSupportedMediaTypes(supportedMediaTypes);
8490

85-
assertCanWrite(MultiValueMap.class, new MediaType("multipart", "mixed"));
86-
assertCanWrite(MultiValueMap.class, new MediaType("multipart", "related"));
91+
assertCanWrite(MULTIPART_MIXED);
92+
assertCanWrite(MULTIPART_RELATED);
93+
}
94+
95+
@Test
96+
public void addSupportedMediaType() {
97+
assertCannotWrite(MULTIPART_MIXED);
98+
assertCannotWrite(MULTIPART_RELATED);
99+
100+
this.converter.addSupportedMediaType(MULTIPART_MIXED);
101+
this.converter.addSupportedMediaType(MULTIPART_RELATED);
102+
103+
assertCanWrite(MULTIPART_MIXED);
104+
assertCanWrite(MULTIPART_RELATED);
105+
}
106+
107+
private void assertCanWrite(MediaType mediaType) {
108+
assertThat(this.converter.canWrite(MultiValueMap.class, mediaType)).isTrue();
87109
}
88110

89-
private void assertCanWrite(Class<?> clazz, MediaType mediaType) {
90-
assertThat(this.converter.canWrite(clazz, mediaType)).isTrue();
111+
private void assertCannotWrite(MediaType mediaType) {
112+
assertThat(this.converter.canWrite(MultiValueMap.class, mediaType)).isFalse();
91113
}
92114

93115
@Test

0 commit comments

Comments
 (0)