diff --git a/org.springframework.web/src/main/java/org/springframework/http/converter/FormHttpMessageConverter.java b/org.springframework.web/src/main/java/org/springframework/http/converter/FormHttpMessageConverter.java index 36d4bfc11b..044fb7a833 100644 --- a/org.springframework.web/src/main/java/org/springframework/http/converter/FormHttpMessageConverter.java +++ b/org.springframework.web/src/main/java/org/springframework/http/converter/FormHttpMessageConverter.java @@ -24,7 +24,6 @@ import java.net.URLDecoder; import java.net.URLEncoder; import java.nio.charset.Charset; import java.util.ArrayList; -import java.util.Arrays; import java.util.Collections; import java.util.Iterator; import java.util.List; @@ -83,9 +82,14 @@ public class FormHttpMessageConverter implements HttpMessageConverter supportedMediaTypes = new ArrayList(); + private List> partConverters = new ArrayList>(); public FormHttpMessageConverter() { + this.supportedMediaTypes.add(MediaType.APPLICATION_FORM_URLENCODED); + this.supportedMediaTypes.add(MediaType.MULTIPART_FORM_DATA); + this.partConverters.add(new ByteArrayHttpMessageConverter()); StringHttpMessageConverter stringHttpMessageConverter = new StringHttpMessageConverter(); stringHttpMessageConverter.setWriteAcceptCharset(false); @@ -120,29 +124,43 @@ public class FormHttpMessageConverter implements HttpMessageConverter clazz, MediaType mediaType) { if (!MultiValueMap.class.isAssignableFrom(clazz)) { return false; } - if (mediaType != null) { - return mediaType.isCompatibleWith(MediaType.APPLICATION_FORM_URLENCODED) || - mediaType.isCompatibleWith(MediaType.MULTIPART_FORM_DATA); - } - else { + if (mediaType == null || MediaType.ALL.equals(mediaType)) { return true; } + for (MediaType supportedMediaType : getSupportedMediaTypes()) { + if (supportedMediaType.isCompatibleWith(mediaType)) { + return true; + } + } + return false; + } + + /** + * Set the list of {@link MediaType} objects supported by this converter. + */ + public void setSupportedMediaTypes(List supportedMediaTypes) { + this.supportedMediaTypes = supportedMediaTypes; } public List getSupportedMediaTypes() { - return Arrays.asList(MediaType.APPLICATION_FORM_URLENCODED, MediaType.MULTIPART_FORM_DATA); + return Collections.unmodifiableList(supportedMediaTypes); } public MultiValueMap read(Class> clazz,