public class FormHttpMessageConverter extends Object implements HttpMessageConverter<MultiValueMap<String,?>>
HttpMessageConverter to read and write 'normal' HTML
 forms and also to write (but not read) multipart data (e.g. file uploads).
 In other words, this converter can read and write the
 "application/x-www-form-urlencoded" media type as
 MultiValueMap<String, String> and it can also
 write (but not read) the "multipart/form-data" media type as
 MultiValueMap<String, Object>.
 
When writing multipart data, this converter uses other
 HttpMessageConverters to write the respective
 MIME parts. By default, basic converters are registered (for Strings
 and Resources). These can be overridden through the
 partConverters property.
 
For example, the following snippet shows how to submit an HTML form:
 RestTemplate template = new RestTemplate();  // FormHttpMessageConverter is configured by default
 MultiValueMap<String, String> form = new LinkedMultiValueMap<String, String>();
 form.add("field 1", "value 1");
 form.add("field 2", "value 2");
 form.add("field 2", "value 3");
 template.postForLocation("http://example.com/myForm", form);
 
 The following snippet shows how to do a file upload:
 MultiValueMap<String, Object> parts = new LinkedMultiValueMap<String, Object>();
 parts.add("field 1", "value 1");
 parts.add("file", new ClassPathResource("myFile.jpg"));
 template.postForLocation("http://example.com/myFileUpload", parts);
 
 Some methods in this class were inspired by
 org.apache.commons.httpclient.methods.multipart.MultipartRequestEntity.
MultiValueMap| Modifier and Type | Field and Description | 
|---|---|
static Charset | 
DEFAULT_CHARSET  | 
| Constructor and Description | 
|---|
FormHttpMessageConverter()  | 
| Modifier and Type | Method and Description | 
|---|---|
void | 
addPartConverter(HttpMessageConverter<?> partConverter)
Add a message body converter. 
 | 
boolean | 
canRead(Class<?> clazz,
       MediaType mediaType)
Indicates whether the given class can be read by this converter. 
 | 
boolean | 
canWrite(Class<?> clazz,
        MediaType mediaType)
Indicates whether the given class can be written by this converter. 
 | 
protected byte[] | 
generateMultipartBoundary()
Generate a multipart boundary. 
 | 
protected String | 
getFilename(Object part)
Return the filename of the given multipart part. 
 | 
protected HttpEntity<?> | 
getHttpEntity(Object part)
Return an  
HttpEntity for the given part Object. | 
List<MediaType> | 
getSupportedMediaTypes()
Return the list of  
MediaType objects supported by this converter. | 
MultiValueMap<String,String> | 
read(Class<? extends MultiValueMap<String,?>> clazz,
    HttpInputMessage inputMessage)
Read an object of the given type from the given input message, and returns it. 
 | 
void | 
setCharset(Charset charset)
Set the default character set to use for reading and writing form data when
 the request or response Content-Type header does not explicitly specify it. 
 | 
void | 
setMultipartCharset(Charset charset)
Set the character set to use when writing multipart data to encode file
 names. 
 | 
void | 
setPartConverters(List<HttpMessageConverter<?>> partConverters)
Set the message body converters to use. 
 | 
void | 
setSupportedMediaTypes(List<MediaType> supportedMediaTypes)
Set the list of  
MediaType objects supported by this converter. | 
void | 
write(MultiValueMap<String,?> map,
     MediaType contentType,
     HttpOutputMessage outputMessage)
Write an given object to the given output message. 
 | 
public static final Charset DEFAULT_CHARSET
public void setSupportedMediaTypes(List<MediaType> supportedMediaTypes)
MediaType objects supported by this converter.public List<MediaType> getSupportedMediaTypes()
HttpMessageConverterMediaType objects supported by this converter.getSupportedMediaTypes in interface HttpMessageConverter<MultiValueMap<String,?>>public void setPartConverters(List<HttpMessageConverter<?>> partConverters)
public void addPartConverter(HttpMessageConverter<?> partConverter)
public void setCharset(Charset charset)
By default this is set to "UTF-8". As of 4.3, it will also be used as
 the default charset for the conversion of text bodies in a multipart request.
 In contrast to this, setMultipartCharset(java.nio.charset.Charset) only affects the encoding of
 file names in a multipart request according to the encoded-word syntax.
public void setMultipartCharset(Charset charset)
MimeUtility from "javax.mail".
 If not set file names will be encoded as US-ASCII.
public boolean canRead(Class<?> clazz, MediaType mediaType)
HttpMessageConvertercanRead in interface HttpMessageConverter<MultiValueMap<String,?>>clazz - the class to test for readabilitymediaType - the media type to read (can be null if not specified);
 typically the value of a Content-Type header.true if readable; false otherwisepublic boolean canWrite(Class<?> clazz, MediaType mediaType)
HttpMessageConvertercanWrite in interface HttpMessageConverter<MultiValueMap<String,?>>clazz - the class to test for writabilitymediaType - the media type to write (can be null if not specified);
 typically the value of an Accept header.true if writable; false otherwisepublic MultiValueMap<String,String> read(Class<? extends MultiValueMap<String,?>> clazz, HttpInputMessage inputMessage) throws IOException, HttpMessageNotReadableException
HttpMessageConverterread in interface HttpMessageConverter<MultiValueMap<String,?>>clazz - the type of object to return. This type must have previously been passed to the
 canRead method of this interface, which must have returned true.inputMessage - the HTTP input message to read fromIOException - in case of I/O errorsHttpMessageNotReadableException - in case of conversion errorspublic void write(MultiValueMap<String,?> map, MediaType contentType, HttpOutputMessage outputMessage) throws IOException, HttpMessageNotWritableException
HttpMessageConverterwrite in interface HttpMessageConverter<MultiValueMap<String,?>>map - the object to write to the output message. The type of this object must have previously been
 passed to the canWrite method of this interface, which must have returned true.contentType - the content type to use when writing. May be null to indicate that the
 default content type of the converter must be used. If not null, this media type must have
 previously been passed to the canWrite method of this interface, which must have
 returned true.outputMessage - the message to write toIOException - in case of I/O errorsHttpMessageNotWritableException - in case of conversion errorsprotected byte[] generateMultipartBoundary()
This implementation delegates to
 MimeTypeUtils.generateMultipartBoundary().
protected HttpEntity<?> getHttpEntity(Object part)
HttpEntity for the given part Object.part - the part to return an HttpEntity forHttpEntity,
 or a newly built HttpEntity wrapper for that partprotected String getFilename(Object part)
Content-Disposition header.
 The default implementation returns Resource.getFilename() if the part is a
 Resource, and null in other cases. Can be overridden in subclasses.
part - the part to determine the file name fornull if not known