Introduce addSupportedMediaType() in FormHttpMessageConverter
Closes gh-23203
This commit is contained in:
parent
8e1cb9a059
commit
4e7d8a8873
|
@ -88,6 +88,7 @@ import org.springframework.util.StringUtils;
|
|||
* @author Arjen Poutsma
|
||||
* @author Rossen Stoyanchev
|
||||
* @author Juergen Hoeller
|
||||
* @author Sam Brannen
|
||||
* @since 3.0
|
||||
* @see org.springframework.http.converter.support.AllEncompassingFormHttpMessageConverter
|
||||
* @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.
|
||||
* @see #addSupportedMediaType(MediaType)
|
||||
* @see #getSupportedMediaTypes()
|
||||
*/
|
||||
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
|
||||
|
|
|
@ -58,36 +58,58 @@ import static org.mockito.Mockito.verify;
|
|||
*/
|
||||
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();
|
||||
|
||||
|
||||
@Test
|
||||
public void canRead() {
|
||||
assertThat(this.converter.canRead(MultiValueMap.class, new MediaType("application", "x-www-form-urlencoded"))).isTrue();
|
||||
assertThat(this.converter.canRead(MultiValueMap.class, new MediaType("multipart", "form-data"))).isFalse();
|
||||
assertThat(this.converter.canRead(MultiValueMap.class, MediaType.APPLICATION_FORM_URLENCODED)).isTrue();
|
||||
assertThat(this.converter.canRead(MultiValueMap.class, MediaType.MULTIPART_FORM_DATA)).isFalse();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void canWrite() {
|
||||
assertCanWrite(MultiValueMap.class, new MediaType("application", "x-www-form-urlencoded"));
|
||||
assertCanWrite(MultiValueMap.class, new MediaType("multipart", "form-data"));
|
||||
assertCanWrite(MultiValueMap.class, new MediaType("multipart", "form-data", StandardCharsets.UTF_8));
|
||||
assertCanWrite(MultiValueMap.class, MediaType.ALL);
|
||||
assertCanWrite(MediaType.APPLICATION_FORM_URLENCODED);
|
||||
assertCanWrite(MediaType.MULTIPART_FORM_DATA);
|
||||
assertCanWrite(new MediaType("multipart", "form-data", StandardCharsets.UTF_8));
|
||||
assertCanWrite(MediaType.ALL);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void canWriteMultipartMixedAndMultipartRelated() {
|
||||
public void setSupportedMediaTypes() {
|
||||
assertCannotWrite(MULTIPART_MIXED);
|
||||
assertCannotWrite(MULTIPART_RELATED);
|
||||
|
||||
List<MediaType> supportedMediaTypes = new ArrayList<>(this.converter.getSupportedMediaTypes());
|
||||
supportedMediaTypes.add(new MediaType("multipart", "mixed"));
|
||||
supportedMediaTypes.add(new MediaType("multipart", "related"));
|
||||
supportedMediaTypes.add(MULTIPART_MIXED);
|
||||
supportedMediaTypes.add(MULTIPART_RELATED);
|
||||
this.converter.setSupportedMediaTypes(supportedMediaTypes);
|
||||
|
||||
assertCanWrite(MultiValueMap.class, new MediaType("multipart", "mixed"));
|
||||
assertCanWrite(MultiValueMap.class, new MediaType("multipart", "related"));
|
||||
assertCanWrite(MULTIPART_MIXED);
|
||||
assertCanWrite(MULTIPART_RELATED);
|
||||
}
|
||||
|
||||
private void assertCanWrite(Class<?> clazz, MediaType mediaType) {
|
||||
assertThat(this.converter.canWrite(clazz, mediaType)).isTrue();
|
||||
@Test
|
||||
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
|
||||
|
|
Loading…
Reference in New Issue