public class FormHttpMessageConverter extends java.lang.Object implements HttpMessageConverter<MultiValueMap<java.lang.String,?>>
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.
MultiValueMap| Constructor and Description |
|---|
FormHttpMessageConverter() |
| Modifier and Type | Method and Description |
|---|---|
void |
addPartConverter(HttpMessageConverter<?> partConverter)
Add a message body converter.
|
boolean |
canRead(java.lang.Class<?> clazz,
MediaType mediaType)
Indicates whether the given class can be read by this converter.
|
boolean |
canWrite(java.lang.Class<?> clazz,
MediaType mediaType)
Indicates whether the given class can be written by this converter.
|
protected byte[] |
generateMultipartBoundary()
Generate a multipart boundary.
|
protected java.lang.String |
getFilename(java.lang.Object part)
Return the filename of the given multipart part.
|
java.util.List<MediaType> |
getSupportedMediaTypes()
Return the list of
MediaType objects supported by this converter. |
MultiValueMap<java.lang.String,java.lang.String> |
read(java.lang.Class<? extends MultiValueMap<java.lang.String,?>> clazz,
HttpInputMessage inputMessage)
Read an object of the given type form the given input message, and returns it.
|
void |
setCharset(java.nio.charset.Charset charset)
Sets the character set used for writing form data.
|
void |
setPartConverters(java.util.List<HttpMessageConverter<?>> partConverters)
Set the message body converters to use.
|
void |
setSupportedMediaTypes(java.util.List<MediaType> supportedMediaTypes)
Set the list of
MediaType objects supported by this converter. |
void |
write(MultiValueMap<java.lang.String,?> map,
MediaType contentType,
HttpOutputMessage outputMessage)
Write an given object to the given output message.
|
public final void setPartConverters(java.util.List<HttpMessageConverter<?>> partConverters)
public final void addPartConverter(HttpMessageConverter<?> partConverter)
public void setCharset(java.nio.charset.Charset charset)
public boolean canRead(java.lang.Class<?> clazz,
MediaType mediaType)
HttpMessageConvertercanRead in interface HttpMessageConverter<MultiValueMap<java.lang.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(java.lang.Class<?> clazz,
MediaType mediaType)
HttpMessageConvertercanWrite in interface HttpMessageConverter<MultiValueMap<java.lang.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 void setSupportedMediaTypes(java.util.List<MediaType> supportedMediaTypes)
MediaType objects supported by this converter.public java.util.List<MediaType> getSupportedMediaTypes()
HttpMessageConverterMediaType objects supported by this converter.getSupportedMediaTypes in interface HttpMessageConverter<MultiValueMap<java.lang.String,?>>public MultiValueMap<java.lang.String,java.lang.String> read(java.lang.Class<? extends MultiValueMap<java.lang.String,?>> clazz, HttpInputMessage inputMessage) throws java.io.IOException, HttpMessageNotReadableException
HttpMessageConverterread in interface HttpMessageConverter<MultiValueMap<java.lang.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 fromjava.io.IOException - in case of I/O errorsHttpMessageNotReadableException - in case of conversion errorspublic void write(MultiValueMap<java.lang.String,?> map, MediaType contentType, HttpOutputMessage outputMessage) throws java.io.IOException, HttpMessageNotWritableException
HttpMessageConverterwrite in interface HttpMessageConverter<MultiValueMap<java.lang.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 tojava.io.IOException - in case of I/O errorsHttpMessageNotWritableException - in case of conversion errorsprotected byte[] generateMultipartBoundary()
The default implementation returns a random boundary. Can be overridden in subclasses.
protected java.lang.String getFilename(java.lang.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