org.springframework.http.converter

## Interface GenericHttpMessageConverter<T>

- Type Parameters:
    `T` - the converted object type
  All Superinterfaces:
    HttpMessageConverter<T>
  All Known Implementing Classes:
    AbstractGenericHttpMessageConverter, AbstractJackson2HttpMessageConverter, AbstractJsonHttpMessageConverter, GsonHttpMessageConverter, Jaxb2CollectionHttpMessageConverter, JsonbHttpMessageConverter, KotlinSerializationJsonHttpMessageConverter, MappingJackson2CborHttpMessageConverter, MappingJackson2HttpMessageConverter, MappingJackson2SmileHttpMessageConverter, MappingJackson2XmlHttpMessageConverter, ResourceRegionHttpMessageConverter

      public interface GenericHttpMessageConverter<T>
      extends HttpMessageConverter<T>

  A specialization of `HttpMessageConverter` that can convert an HTTP request into a target object of a specified generic type and a source object of a specified generic type into an HTTP response.
  Since:
    3.2
  Author:
    Arjen Poutsma, Rossen Stoyanchev, Sebastien Deleuze
  See Also:
    `ParameterizedTypeReference`

- - ### Method Summary

    All Methods Instance Methods Abstract Methods
    Modifier and Type | Method and Description
    --- | ---
    `boolean` | `canRead(Type type, Class<?> contextClass, MediaType mediaType)` Indicates whether the given type can be read by this converter.
    `boolean` | `canWrite(Type type, Class<?> clazz, MediaType mediaType)` Indicates whether the given class can be written by this converter.
    `T` | `read(Type type, Class<?> contextClass, HttpInputMessage inputMessage)` Read an object of the given type form the given input message, and returns it.
    `void` | `write(T t, Type type, MediaType contentType, HttpOutputMessage outputMessage)` Write a given object to the given output message.

    - ### Methods inherited from interface org.springframework.http.converter.HttpMessageConverter

      `canRead, canWrite, getSupportedMediaTypes, getSupportedMediaTypes, read, write`

- - ### Method Detail

    - #### canRead

          boolean canRead(Type type,
                          @Nullable
                          Class<?> contextClass,
                          @Nullable
                          MediaType mediaType)

      Indicates whether the given type can be read by this converter. This method should perform the same checks as `HttpMessageConverter.canRead(Class, MediaType)` with additional ones related to the generic type.
      Parameters:
        `type` - the (potentially generic) type to test for readability
        `contextClass` - a context class for the target type, for example a class in which the target type appears in a method signature (can be `null`)
        `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

    - #### read

          T read(Type type,
                 @Nullable
                 Class<?> contextClass,
                 HttpInputMessage inputMessage)
          throws IOException,
                 HttpMessageNotReadableException

      Read an object of the given type form the given input message, and returns it.
      Parameters:
        `type` - the (potentially generic) type of object to return. This type must have previously been passed to the `canRead` method of this interface, which must have returned `true`.
        `contextClass` - a context class for the target type, for example a class in which the target type appears in a method signature (can be `null`)
        `inputMessage` - the HTTP input message to read from
      Returns:
        the converted object
      Throws:
        `IOException` - in case of I/O errors
        `HttpMessageNotReadableException` - in case of conversion errors

    - #### canWrite

          boolean canWrite(@Nullable
                           Type type,
                           Class<?> clazz,
                           @Nullable
                           MediaType mediaType)

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

      This method should perform the same checks as `HttpMessageConverter.canWrite(Class, MediaType)` with additional ones related to the generic type.

      Parameters:
        `type` - the (potentially generic) type to test for writability (can be `null` if not specified)
        `clazz` - the source object 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
      Since:
        4.2

    - #### write

          void write(T t,
                     @Nullable
                     Type type,
                     @Nullable
                     MediaType contentType,
                     HttpOutputMessage outputMessage)
              throws IOException,
                     HttpMessageNotWritableException

      Write a given object to the given output message.
      Parameters:
        `t` - 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`.
        `type` - the (potentially generic) type of object to write. This type must have previously been passed to the `canWrite` method of this interface, which must have returned `true`. Can be `null` if not specified.
        `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 to
      Throws:
        `IOException` - in case of I/O errors
        `HttpMessageNotWritableException` - in case of conversion errors
      Since:
        4.2