public class

FormHttpMessageConverter

extends Object
implements HttpMessageConverter<T>
java.lang.Object
   ↳ org.springframework.http.converter.FormHttpMessageConverter
Known Direct Subclasses

Class Overview

Implementation of HttpMessageConverter that can handle form data, including multipart form data (i.e. file uploads).

This converter can write the application/x-www-form-urlencoded and multipart/form-data media types, and read the application/x-www-form-urlencoded) media type (but not multipart/form-data).

In other words, this converter can read and write 'normal' HTML forms (as MultiValueMap<String, String>), and it can write multipart form (as MultiValueMap<String, Object>. When writing multipart, this converter uses other HttpMessageConverters to write the respective MIME parts. By default, basic converters are registered (supporting Strings and Resources, for instance); these can be overridden by setting 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.

See Also

Summary

Public Constructors
FormHttpMessageConverter()
Public Methods
final 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.
List<MediaType> getSupportedMediaTypes()
Return the list of MediaType objects supported by this converter.
MultiValueMap<StringString> read(Class<? extends MultiValueMap<String, ?>> clazz, HttpInputMessage inputMessage)
void setCharset(Charset charset)
Sets the character set used for writing form data.
final void setPartConverters(List<HttpMessageConverter<?>> partConverters)
Set the message body converters to use.
void write(MultiValueMap<String, ?> map, MediaType contentType, HttpOutputMessage outputMessage)
Protected Methods
byte[] generateMultipartBoundary()
Generate a multipart boundary.
String getFilename(Object part)
Return the filename of the given multipart part.
[Expand]
Inherited Methods
From class java.lang.Object
From interface org.springframework.http.converter.HttpMessageConverter

Public Constructors

public FormHttpMessageConverter ()

Public Methods

public final void addPartConverter (HttpMessageConverter<?> partConverter)

Add a message body converter. Such a converters is used to convert objects to MIME parts.

public boolean canRead (Class<?> clazz, MediaType mediaType)

Indicates whether the given class can be read by this converter.

Parameters
clazz the class to test for readability
mediaType the media type to read, can be null if not specified. Typically the value of a Content-Type header.
Returns
  • true if readable; false otherwise

public boolean canWrite (Class<?> clazz, MediaType mediaType)

Indicates whether the given class can be written by this converter.

Parameters
clazz the class to test for writability
mediaType the media type to write, can be null if not specified. Typically the value of an Accept header.
Returns
  • true if writable; false otherwise

public List<MediaType> getSupportedMediaTypes ()

Return the list of MediaType objects supported by this converter.

Returns
  • the list of supported media types

public MultiValueMap<StringString> read (Class<? extends MultiValueMap<String, ?>> clazz, HttpInputMessage inputMessage)

public void setCharset (Charset charset)

Sets the character set used for writing form data.

public final void setPartConverters (List<HttpMessageConverter<?>> partConverters)

Set the message body converters to use. These converters are used to convert objects to MIME parts.

public void write (MultiValueMap<String, ?> map, MediaType contentType, HttpOutputMessage outputMessage)

Protected Methods

protected byte[] generateMultipartBoundary ()

Generate a multipart boundary.

Default implementation returns a random boundary. Can be overridden in subclasses.

protected String getFilename (Object part)

Return the filename of the given multipart part. This value will be used for the Content-Disposition header.

Default implementation returns getFilename() if the part is a Resource, and null in other cases. Can be overridden in subclasses.

Parameters
part the part to determine the file name for
Returns
  • the filename, or null if not known