Introduce addSupportedMediaType() in FormHttpMessageConverter
Closes gh-23203
This commit is contained in:
@@ -88,6 +88,7 @@ import org.springframework.util.StringUtils;
|
|||||||
* @author Arjen Poutsma
|
* @author Arjen Poutsma
|
||||||
* @author Rossen Stoyanchev
|
* @author Rossen Stoyanchev
|
||||||
* @author Juergen Hoeller
|
* @author Juergen Hoeller
|
||||||
|
* @author Sam Brannen
|
||||||
* @since 3.0
|
* @since 3.0
|
||||||
* @see org.springframework.http.converter.support.AllEncompassingFormHttpMessageConverter
|
* @see org.springframework.http.converter.support.AllEncompassingFormHttpMessageConverter
|
||||||
* @see org.springframework.util.MultiValueMap
|
* @see org.springframework.util.MultiValueMap
|
||||||
@@ -127,9 +128,23 @@ public class FormHttpMessageConverter implements HttpMessageConverter<MultiValue
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Set the list of {@link MediaType} objects supported by this converter.
|
* Set the list of {@link MediaType} objects supported by this converter.
|
||||||
|
* @see #addSupportedMediaType(MediaType)
|
||||||
|
* @see #getSupportedMediaTypes()
|
||||||
*/
|
*/
|
||||||
public void setSupportedMediaTypes(List<MediaType> supportedMediaTypes) {
|
public void setSupportedMediaTypes(List<MediaType> supportedMediaTypes) {
|
||||||
this.supportedMediaTypes = supportedMediaTypes;
|
Assert.notNull(supportedMediaTypes, "'supportedMediaTypes' must not be null");
|
||||||
|
// Ensure internal list is mutable.
|
||||||
|
this.supportedMediaTypes = new ArrayList<>(supportedMediaTypes);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add a {@link MediaType} to be supported by this converter.
|
||||||
|
* @since 5.2
|
||||||
|
* @see #setSupportedMediaTypes(List)
|
||||||
|
*/
|
||||||
|
public void addSupportedMediaType(MediaType supportedMediaType) {
|
||||||
|
Assert.notNull(supportedMediaType, "'supportedMediaType' must not be null");
|
||||||
|
this.supportedMediaTypes.add(supportedMediaType);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -58,36 +58,58 @@ import static org.mockito.Mockito.verify;
|
|||||||
*/
|
*/
|
||||||
public class FormHttpMessageConverterTests {
|
public class FormHttpMessageConverterTests {
|
||||||
|
|
||||||
|
protected static final MediaType MULTIPART_MIXED = new MediaType("multipart", "mixed");
|
||||||
|
protected static final MediaType MULTIPART_RELATED = new MediaType("multipart", "related");
|
||||||
|
|
||||||
private final FormHttpMessageConverter converter = new AllEncompassingFormHttpMessageConverter();
|
private final FormHttpMessageConverter converter = new AllEncompassingFormHttpMessageConverter();
|
||||||
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void canRead() {
|
public void canRead() {
|
||||||
assertThat(this.converter.canRead(MultiValueMap.class, new MediaType("application", "x-www-form-urlencoded"))).isTrue();
|
assertThat(this.converter.canRead(MultiValueMap.class, MediaType.APPLICATION_FORM_URLENCODED)).isTrue();
|
||||||
assertThat(this.converter.canRead(MultiValueMap.class, new MediaType("multipart", "form-data"))).isFalse();
|
assertThat(this.converter.canRead(MultiValueMap.class, MediaType.MULTIPART_FORM_DATA)).isFalse();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void canWrite() {
|
public void canWrite() {
|
||||||
assertCanWrite(MultiValueMap.class, new MediaType("application", "x-www-form-urlencoded"));
|
assertCanWrite(MediaType.APPLICATION_FORM_URLENCODED);
|
||||||
assertCanWrite(MultiValueMap.class, new MediaType("multipart", "form-data"));
|
assertCanWrite(MediaType.MULTIPART_FORM_DATA);
|
||||||
assertCanWrite(MultiValueMap.class, new MediaType("multipart", "form-data", StandardCharsets.UTF_8));
|
assertCanWrite(new MediaType("multipart", "form-data", StandardCharsets.UTF_8));
|
||||||
assertCanWrite(MultiValueMap.class, MediaType.ALL);
|
assertCanWrite(MediaType.ALL);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void canWriteMultipartMixedAndMultipartRelated() {
|
public void setSupportedMediaTypes() {
|
||||||
|
assertCannotWrite(MULTIPART_MIXED);
|
||||||
|
assertCannotWrite(MULTIPART_RELATED);
|
||||||
|
|
||||||
List<MediaType> supportedMediaTypes = new ArrayList<>(this.converter.getSupportedMediaTypes());
|
List<MediaType> supportedMediaTypes = new ArrayList<>(this.converter.getSupportedMediaTypes());
|
||||||
supportedMediaTypes.add(new MediaType("multipart", "mixed"));
|
supportedMediaTypes.add(MULTIPART_MIXED);
|
||||||
supportedMediaTypes.add(new MediaType("multipart", "related"));
|
supportedMediaTypes.add(MULTIPART_RELATED);
|
||||||
this.converter.setSupportedMediaTypes(supportedMediaTypes);
|
this.converter.setSupportedMediaTypes(supportedMediaTypes);
|
||||||
|
|
||||||
assertCanWrite(MultiValueMap.class, new MediaType("multipart", "mixed"));
|
assertCanWrite(MULTIPART_MIXED);
|
||||||
assertCanWrite(MultiValueMap.class, new MediaType("multipart", "related"));
|
assertCanWrite(MULTIPART_RELATED);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void assertCanWrite(Class<?> clazz, MediaType mediaType) {
|
@Test
|
||||||
assertThat(this.converter.canWrite(clazz, mediaType)).isTrue();
|
public void addSupportedMediaType() {
|
||||||
|
assertCannotWrite(MULTIPART_MIXED);
|
||||||
|
assertCannotWrite(MULTIPART_RELATED);
|
||||||
|
|
||||||
|
this.converter.addSupportedMediaType(MULTIPART_MIXED);
|
||||||
|
this.converter.addSupportedMediaType(MULTIPART_RELATED);
|
||||||
|
|
||||||
|
assertCanWrite(MULTIPART_MIXED);
|
||||||
|
assertCanWrite(MULTIPART_RELATED);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void assertCanWrite(MediaType mediaType) {
|
||||||
|
assertThat(this.converter.canWrite(MultiValueMap.class, mediaType)).isTrue();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void assertCannotWrite(MediaType mediaType) {
|
||||||
|
assertThat(this.converter.canWrite(MultiValueMap.class, mediaType)).isFalse();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|||||||
Reference in New Issue
Block a user