Package org.springframework.http.converter

# Class ResourceHttpMessageConverter

java.lang.Object
org.springframework.http.converter.AbstractHttpMessageConverter<org.springframework.core.io.Resource>
org.springframework.http.converter.ResourceHttpMessageConverter

All Implemented Interfaces:
  `HttpMessageConverter<org.springframework.core.io.Resource>`

public class ResourceHttpMessageConverter extends AbstractHttpMessageConverter<org.springframework.core.io.Resource>
Implementation of `HttpMessageConverter` that can read/write `Resources` and supports byte range requests.

By default, this converter can read all media types. The `MediaTypeFactory` is used to determine the `Content-Type` of written resources.

Since:
  3.0.2
Author:
  Arjen Poutsma, Juergen Hoeller, Kazuki Shimizu

## Field Summary

### Fields inherited from class org.springframework.http.converter.AbstractHttpMessageConverter

`logger`

## Constructor Summary

Constructors
Constructor
Description
`ResourceHttpMessageConverter()`
Create a new instance of the `ResourceHttpMessageConverter` that supports read streaming, i.e.
`ResourceHttpMessageConverter(boolean supportsReadStreaming)`
Create a new instance of the `ResourceHttpMessageConverter`.

## Method Summary

Modifier and Type
Method
Description
`void`
`addDefaultHeaders(HttpOutputMessage message, org.springframework.core.io.Resource resource, MediaType contentType)`
Add the default headers for the given resource to the given message.
`protected Long`
`getContentLength(org.springframework.core.io.Resource resource, MediaType contentType)`
Returns the content length for the given type.
`protected MediaType`
`getDefaultContentType(org.springframework.core.io.Resource resource)`
Returns the default content type for the given type.
`protected org.springframework.core.io.Resource`
`readInternal(Class<? extends org.springframework.core.io.Resource> clazz, HttpInputMessage inputMessage)`
Abstract template method that reads the actual object.
`protected boolean`
`supports(Class<?> clazz)`
Indicates whether the given class is supported by this converter.
`protected boolean`
`supportsRepeatableWrites(org.springframework.core.io.Resource resource)`
Indicates whether this message converter can write the given object multiple times.
`protected void`
`writeContent(org.springframework.core.io.Resource resource, HttpOutputMessage outputMessage)`
`protected void`
`writeInternal(org.springframework.core.io.Resource resource, HttpOutputMessage outputMessage)`
Abstract template method that writes the actual body.

### Methods inherited from class org.springframework.http.converter.AbstractHttpMessageConverter

`addDefaultHeaders, canRead, canRead, canWrite, canWrite, getDefaultCharset, getSupportedMediaTypes, read, setDefaultCharset, setSupportedMediaTypes, write`

### 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.converter.HttpMessageConverter

`getSupportedMediaTypes`

## Constructor Details

### ResourceHttpMessageConverter

public ResourceHttpMessageConverter()
Create a new instance of the `ResourceHttpMessageConverter` that supports read streaming, i.e. can convert an `HttpInputMessage` to `InputStreamResource`.

### ResourceHttpMessageConverter

public ResourceHttpMessageConverter(boolean supportsReadStreaming)
Create a new instance of the `ResourceHttpMessageConverter`.

Parameters:
  `supportsReadStreaming` - whether the converter should support read streaming, i.e. convert to `InputStreamResource`
Since:
  5.0

## Method Details

### supports

protected boolean supports(Class<?> clazz)
Description copied from class: `AbstractHttpMessageConverter`
Indicates whether the given class is supported by this converter.

Specified by:
  `supports` in class `AbstractHttpMessageConverter<org.springframework.core.io.Resource>`
Parameters:
  `clazz` - the class to test for support
Returns:
  `true` if supported; `false` otherwise

### readInternal

protected org.springframework.core.io.Resource readInternal(Class<? extends org.springframework.core.io.Resource> clazz, HttpInputMessage inputMessage) throws IOException, HttpMessageNotReadableException
Description copied from class: `AbstractHttpMessageConverter`
Abstract template method that reads the actual object. Invoked from `AbstractHttpMessageConverter.read(java.lang.Class<? extends T>, org.springframework.http.HttpInputMessage)`.

Specified by:
  `readInternal` in class `AbstractHttpMessageConverter<org.springframework.core.io.Resource>`
Parameters:
  `clazz` - the type of object to return
  `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

### writeInternal

protected void writeInternal(org.springframework.core.io.Resource resource, HttpOutputMessage outputMessage) throws IOException, HttpMessageNotWritableException
Description copied from class: `AbstractHttpMessageConverter`
Abstract template method that writes the actual body. Invoked from `AbstractHttpMessageConverter.write(T, org.springframework.http.MediaType, org.springframework.http.HttpOutputMessage)`.

Specified by:
  `writeInternal` in class `AbstractHttpMessageConverter<org.springframework.core.io.Resource>`
Parameters:
  `resource` - the object to write to the output message
  `outputMessage` - the HTTP output message to write to
Throws:
  `IOException` - in case of I/O errors
  `HttpMessageNotWritableException` - in case of conversion errors

### addDefaultHeaders

public void addDefaultHeaders(HttpOutputMessage message, org.springframework.core.io.Resource resource, @Nullable MediaType contentType) throws IOException
Add the default headers for the given resource to the given message.

Throws:
  `IOException`
Since:
  6.0

### getDefaultContentType

protected MediaType getDefaultContentType(org.springframework.core.io.Resource resource)
Description copied from class: `AbstractHttpMessageConverter`
Returns the default content type for the given type. Called when `AbstractHttpMessageConverter.write(T, org.springframework.http.MediaType, org.springframework.http.HttpOutputMessage)` is invoked without a specified content type parameter.

By default, this returns the first element of the `supportedMediaTypes` property, if any. Can be overridden in subclasses.

Overrides:
  `getDefaultContentType` in class `AbstractHttpMessageConverter<org.springframework.core.io.Resource>`
Parameters:
  `resource` - the type to return the content type for
Returns:
  the content type, or `null` if not known

### getContentLength

@Nullable protected Long getContentLength(org.springframework.core.io.Resource resource, @Nullable MediaType contentType) throws IOException
Description copied from class: `AbstractHttpMessageConverter`
Returns the content length for the given type.

By default, this returns `null`, meaning that the content length is unknown. Can be overridden in subclasses.

Overrides:
  `getContentLength` in class `AbstractHttpMessageConverter<org.springframework.core.io.Resource>`
Parameters:
  `resource` - the type to return the content length for
Returns:
  the content length, or `null` if not known
Throws:
  `IOException`

### supportsRepeatableWrites

protected boolean supportsRepeatableWrites(org.springframework.core.io.Resource resource)
Description copied from class: `AbstractHttpMessageConverter`
Indicates whether this message converter can write the given object multiple times.

The default implementation returns `false`.

Overrides:
  `supportsRepeatableWrites` in class `AbstractHttpMessageConverter<org.springframework.core.io.Resource>`
Parameters:
  `resource` - the object t
Returns:
  `true` if `t` can be written repeatedly; `false` otherwise

### writeContent

protected void writeContent(org.springframework.core.io.Resource resource, HttpOutputMessage outputMessage) throws IOException, HttpMessageNotWritableException

Throws:
  `IOException`
  `HttpMessageNotWritableException`