org.springframework.http.codec

## Class FormHttpMessageWriter

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

- All Implemented Interfaces:
    HttpMessageWriter<MultiValueMap<String,String>>

      public class FormHttpMessageWriter
      extends LoggingCodecSupport
      implements HttpMessageWriter<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 and Description
    --- | ---
    `static Charset` | `DEFAULT_CHARSET` The default charset used by the writer.

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

      `logger`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `FormHttpMessageWriter()`

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `boolean` | `canWrite(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)`
    `List<MediaType>` | `getWritableMediaTypes()` Return the list of media types supported by this Writer.
    `protected String` | `serializeForm(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 MultiValueMap<String,String>> inputStream, 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 Detail

    - #### DEFAULT_CHARSET

          public static final Charset DEFAULT_CHARSET

      The default charset used by the writer.

  - ### Constructor Detail

    - #### FormHttpMessageWriter

          public FormHttpMessageWriter()

  - ### Method Detail

    - #### 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<MultiValueMap<String,String>>`
      Returns:
        the general list of supported media types

    - #### canWrite

          public boolean canWrite(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<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 MultiValueMap<String,String>> inputStream,
                                                         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<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)

    - #### serializeForm

          protected String serializeForm(MultiValueMap<String,String> formData,
                                         Charset charset)