Package org.springframework.http.codec

# Class FormHttpMessageWriter

java.lang.Object
org.springframework.http.codec.LoggingCodecSupport
org.springframework.http.codec.FormHttpMessageWriter

All Implemented Interfaces:
  `HttpMessageWriter<org.springframework.util.MultiValueMap<String,String>>`

public class FormHttpMessageWriter extends LoggingCodecSupport implements HttpMessageWriter<org.springframework.util.MultiValueMap<String,String>>
`HttpMessageWriter` for writing a `MultiValueMap<String, String>` as HTML form data, i.e. `"application/x-www-form-urlencoded"`, to the body of a request.

Note that unless the media type is explicitly set to `MediaType.APPLICATION_FORM_URLENCODED`, the `canWrite(org.springframework.core.ResolvableType, org.springframework.http.MediaType)` method will need generic type information to confirm the target map has String values. This is because a MultiValueMap with non-String values can be used to write multipart requests.

To support both form data and multipart requests, consider using `MultipartHttpMessageWriter` configured with this writer as the fallback for writing plain form data.

Since:
  5.0
Author:
  Sebastien Deleuze, Rossen Stoyanchev
See Also:
  - `MultipartHttpMessageWriter`

## Field Summary

Fields
Modifier and Type
Field
Description
`static final Charset`
`DEFAULT_CHARSET`
The default charset used by the writer.

### Fields inherited from class org.springframework.http.codec.LoggingCodecSupport

`logger`

## Constructor Summary

Constructors
Constructor
Description
`FormHttpMessageWriter()`

## Method Summary

Modifier and Type
Method
Description
`boolean`
`canWrite(org.springframework.core.ResolvableType elementType, MediaType mediaType)`
Whether the given object type is supported by this writer.
`Charset`
`getDefaultCharset()`
Return the configured default charset.
`protected MediaType`
`getMediaType(MediaType mediaType)`
Return the content type used to write forms, either the given media type or otherwise `application/x-www-form-urlencoded`.
`List<MediaType>`
`getWritableMediaTypes()`
Return the list of media types supported by this Writer.
`protected String`
`serializeForm(org.springframework.util.MultiValueMap<String,String> formData, Charset charset)`
`void`
`setDefaultCharset(Charset charset)`
Set the default character set to use for writing form data when the response Content-Type header does not explicitly specify it.
`reactor.core.publisher.Mono<Void>`
`write(Publisher<? extends org.springframework.util.MultiValueMap<String,String>> inputStream, org.springframework.core.ResolvableType elementType, MediaType mediaType, ReactiveHttpOutputMessage message, Map<String,Object> hints)`
Write a given stream of object to the output message.

### Methods inherited from class org.springframework.http.codec.LoggingCodecSupport

`isEnableLoggingRequestDetails, setEnableLoggingRequestDetails`

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

### Methods inherited from interface org.springframework.http.codec.HttpMessageWriter

`getWritableMediaTypes, write`

## Field Details

### DEFAULT_CHARSET

public static final Charset DEFAULT_CHARSET
The default charset used by the writer.

## Constructor Details

### FormHttpMessageWriter

public FormHttpMessageWriter()

## Method Details

### setDefaultCharset

public void setDefaultCharset(Charset charset)
Set the default character set to use for writing form data when the response Content-Type header does not explicitly specify it.

By default this is set to "UTF-8".

### getDefaultCharset

public Charset getDefaultCharset()
Return the configured default charset.

### getWritableMediaTypes

public List<MediaType> getWritableMediaTypes()
Description copied from interface: `HttpMessageWriter`
Return the list of media types supported by this Writer. The list may not apply to every possible target element type and calls to this method should typically be guarded via `canWrite(elementType, null)`. The list may also exclude media types supported only for a specific element type. Alternatively, use `HttpMessageWriter.getWritableMediaTypes(ResolvableType)` for a more precise list.

Specified by:
  `getWritableMediaTypes` in interface `HttpMessageWriter<org.springframework.util.MultiValueMap<String,String>>`
Returns:
  the general list of supported media types

### canWrite

public boolean canWrite(org.springframework.core.ResolvableType elementType, @Nullable MediaType mediaType)
Description copied from interface: `HttpMessageWriter`
Whether the given object type is supported by this writer.

Specified by:
  `canWrite` in interface `HttpMessageWriter<org.springframework.util.MultiValueMap<String,String>>`
Parameters:
  `elementType` - the type of object to check
  `mediaType` - the media type for the write (possibly `null`)
Returns:
  `true` if writable, `false` otherwise

### write

public reactor.core.publisher.Mono<Void> write(Publisher<? extends org.springframework.util.MultiValueMap<String,String>> inputStream, org.springframework.core.ResolvableType elementType, @Nullable MediaType mediaType, ReactiveHttpOutputMessage message, Map<String,Object> hints)
Description copied from interface: `HttpMessageWriter`
Write a given stream of object to the output message.

Specified by:
  `write` in interface `HttpMessageWriter<org.springframework.util.MultiValueMap<String,String>>`
Parameters:
  `inputStream` - the objects to write
  `elementType` - the type of objects in the stream which must have been previously checked via `HttpMessageWriter.canWrite(ResolvableType, MediaType)`
  `mediaType` - the content type for the write (possibly `null` to indicate that the default content type of the writer must be used)
  `message` - the message to write to
  `hints` - additional information about how to encode and write
Returns:
  indicates completion or error

### getMediaType

protected MediaType getMediaType(@Nullable MediaType mediaType)
Return the content type used to write forms, either the given media type or otherwise `application/x-www-form-urlencoded`.

Parameters:
  `mediaType` - the media type passed to `write(org.reactivestreams.Publisher<? extends org.springframework.util.MultiValueMap<java.lang.String, java.lang.String>>, org.springframework.core.ResolvableType, org.springframework.http.MediaType, org.springframework.http.ReactiveHttpOutputMessage, java.util.Map<java.lang.String, java.lang.Object>)`, or `null`
Returns:
  the content type to use

### serializeForm

protected String serializeForm(org.springframework.util.MultiValueMap<String,String> formData, Charset charset)