Package org.springframework.web.accept

# Class ContentNegotiationManagerFactoryBean

java.lang.Object
org.springframework.web.accept.ContentNegotiationManagerFactoryBean

All Implemented Interfaces:
  `org.springframework.beans.factory.Aware`, `org.springframework.beans.factory.FactoryBean<ContentNegotiationManager>`, `org.springframework.beans.factory.InitializingBean`, `ServletContextAware`

public class ContentNegotiationManagerFactoryBean extends Object implements org.springframework.beans.factory.FactoryBean<ContentNegotiationManager>, ServletContextAware, org.springframework.beans.factory.InitializingBean
Factory to create a `ContentNegotiationManager` and configure it with `ContentNegotiationStrategy` instances.

This factory offers properties that in turn result in configuring the underlying strategies. The table below shows the property names, their default settings, as well as the strategies that they help to configure:

Property Setter | Default Value | Underlying Strategy | Enabled Or Not
--- | --- | --- | ---
`favorParameter` | false | `ParameterContentNegotiationStrategy` | Off
`favorPathExtension` | false | `PathExtensionContentNegotiationStrategy` | Off
`ignoreAcceptHeader` | false | `HeaderContentNegotiationStrategy` | Enabled
`defaultContentType` | null | `FixedContentNegotiationStrategy` | Off
`defaultContentTypeStrategy` | null | `ContentNegotiationStrategy` | Off

Alternatively you can avoid use of the above convenience builder methods and set the exact strategies to use via `setStrategies(List)`.

Deprecation Note: As of 5.2.4, `favorPathExtension` and `ignoreUnknownPathExtensions` are deprecated in order to discourage using path extensions for content negotiation and for request mapping with similar deprecations on `RequestMappingHandlerMapping`. For further context, please read issue #24719.

Since:
  3.2
Author:
  Rossen Stoyanchev, Brian Clozel

## Field Summary

### Fields inherited from interface org.springframework.beans.factory.FactoryBean

`OBJECT_TYPE_ATTRIBUTE`

## Constructor Summary

Constructors
Constructor
Description
`ContentNegotiationManagerFactoryBean()`

## Method Summary

Modifier and Type
Method
Description
`void`
`addMediaType(String key, MediaType mediaType)`
An alternative to `setMediaTypes(java.util.Properties)` for programmatic registrations.
`void`
`addMediaTypes(Map<String,MediaType> mediaTypes)`
An alternative to `setMediaTypes(java.util.Properties)` for programmatic registrations.
`void`
`afterPropertiesSet()`
`ContentNegotiationManager`
`build()`
Create and initialize a `ContentNegotiationManager` instance.
`ContentNegotiationManager`
`getObject()`
`Class<?>`
`getObjectType()`
`boolean`
`isSingleton()`
`void`
`setDefaultContentType(MediaType contentType)`
Set the default content type to use when no content type is requested.
`void`
`setDefaultContentTypes(List<MediaType> contentTypes)`
Set the default content types to use when no content type is requested.
`void`
`setDefaultContentTypeStrategy(ContentNegotiationStrategy strategy)`
Set a custom `ContentNegotiationStrategy` to use to determine the content type to use when no content type is requested.
`void`
`setFavorParameter(boolean favorParameter)`
Whether a request parameter ("format" by default) should be used to determine the requested media type.
`void`
`setFavorPathExtension(boolean favorPathExtension)`
Deprecated.
as of 5.2.4.
`void`
`setIgnoreAcceptHeader(boolean ignoreAcceptHeader)`
Whether to disable checking the 'Accept' request header.
`void`
`setIgnoreUnknownPathExtensions(boolean ignore)`
Deprecated.
as of 5.2.4.
`void`
`setMediaTypes(Properties mediaTypes)`
Add a mapping from a key to a MediaType where the key are normalized to lowercase and may have been extracted from a path extension, a filename extension, or passed as a query parameter.
`void`
`setParameterName(String parameterName)`
Set the query parameter name to use when `setFavorParameter(boolean)` is on.
`void`
`setServletContext(ServletContext servletContext)`
Invoked by Spring to inject the ServletContext.
`void`
`setStrategies(List<ContentNegotiationStrategy> strategies)`
Set the exact list of strategies to use.
`void`
`setUseJaf(boolean useJaf)`
Deprecated.
as of 5.0, in favor of `setUseRegisteredExtensionsOnly(boolean)`, which has reverse behavior.
`void`
`setUseRegisteredExtensionsOnly(boolean useRegisteredExtensionsOnly)`
When `favorPathExtension` or `setFavorParameter(boolean)` is set, this property determines whether to use only registered `MediaType` mappings or to allow dynamic resolution, for example, via `MediaTypeFactory`.

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

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

## Constructor Details

### ContentNegotiationManagerFactoryBean

public ContentNegotiationManagerFactoryBean()

## Method Details

### setStrategies

public void setStrategies(@Nullable List<ContentNegotiationStrategy> strategies)
Set the exact list of strategies to use.

Note: use of this method is mutually exclusive with use of all other setters in this class which customize a default, fixed set of strategies. See class level doc for more details.

Parameters:
  `strategies` - the strategies to use
Since:
  5.0

### setFavorParameter

public void setFavorParameter(boolean favorParameter)
Whether a request parameter ("format" by default) should be used to determine the requested media type. For this option to work you must register `media type mappings`.

By default this is set to `false`.

See Also:
  - `setParameterName(java.lang.String)`

### setParameterName

public void setParameterName(String parameterName)
Set the query parameter name to use when `setFavorParameter(boolean)` is on.

The default parameter name is `"format"`.

### setFavorPathExtension

@Deprecated public void setFavorPathExtension(boolean favorPathExtension)
Deprecated.
as of 5.2.4. See class-level note on the deprecation of path extension config options.
Whether the path extension in the URL path should be used to determine the requested media type.

By default this is set to `false` in which case path extensions have no impact on content negotiation.

### setMediaTypes

public void setMediaTypes(Properties mediaTypes)
Add a mapping from a key to a MediaType where the key are normalized to lowercase and may have been extracted from a path extension, a filename extension, or passed as a query parameter.

The `parameter strategy` requires such mappings in order to work while the `path extension strategy` can fall back on lookups via `ServletContext.getMimeType(java.lang.String)` and `MediaTypeFactory`.

Note: Mappings registered here may be accessed via `ContentNegotiationManager.getMediaTypeMappings()` and may be used not only in the parameter and path extension strategies. For example, with the Spring MVC config, for example, `@EnableWebMvc` or `<mvc:annotation-driven>`, the media type mappings are also plugged in to:

- Determine the media type of static resources served with `ResourceHttpRequestHandler`.
- Determine the media type of views rendered with `ContentNegotiatingViewResolver`.
- List safe extensions for RFD attack detection (check the Spring Framework reference docs for details).

Parameters:
  `mediaTypes` - media type mappings
See Also:
  - `addMediaType(String, MediaType)`
  - `addMediaTypes(Map)`

### addMediaType

public void addMediaType(String key, MediaType mediaType)
An alternative to `setMediaTypes(java.util.Properties)` for programmatic registrations.

### addMediaTypes

public void addMediaTypes(@Nullable Map<String,MediaType> mediaTypes)
An alternative to `setMediaTypes(java.util.Properties)` for programmatic registrations.

### setIgnoreUnknownPathExtensions

@Deprecated public void setIgnoreUnknownPathExtensions(boolean ignore)
Deprecated.
as of 5.2.4. See class-level note on the deprecation of path extension config options.
Whether to ignore requests with path extension that cannot be resolved to any media type. Setting this to `false` will result in an `HttpMediaTypeNotAcceptableException` if there is no match.

By default this is set to `true`.

### setUseJaf

@Deprecated public void setUseJaf(boolean useJaf)
Deprecated.
as of 5.0, in favor of `setUseRegisteredExtensionsOnly(boolean)`, which has reverse behavior.
Indicate whether to use the Java Activation Framework as a fallback option to map from file extensions to media types.

### setUseRegisteredExtensionsOnly

public void setUseRegisteredExtensionsOnly(boolean useRegisteredExtensionsOnly)
When `favorPathExtension` or `setFavorParameter(boolean)` is set, this property determines whether to use only registered `MediaType` mappings or to allow dynamic resolution, for example, via `MediaTypeFactory`.

By default this is not set in which case dynamic resolution is on.

### setIgnoreAcceptHeader

public void setIgnoreAcceptHeader(boolean ignoreAcceptHeader)
Whether to disable checking the 'Accept' request header.

By default this value is set to `false`.

### setDefaultContentType

public void setDefaultContentType(MediaType contentType)
Set the default content type to use when no content type is requested.

By default this is not set.

See Also:
  - `setDefaultContentTypeStrategy(org.springframework.web.accept.ContentNegotiationStrategy)`

### setDefaultContentTypes

public void setDefaultContentTypes(List<MediaType> contentTypes)
Set the default content types to use when no content type is requested.

By default this is not set.

Since:
  5.0
See Also:
  - `setDefaultContentTypeStrategy(org.springframework.web.accept.ContentNegotiationStrategy)`

### setDefaultContentTypeStrategy

public void setDefaultContentTypeStrategy(ContentNegotiationStrategy strategy)
Set a custom `ContentNegotiationStrategy` to use to determine the content type to use when no content type is requested.

By default this is not set.

Since:
  4.1.2
See Also:
  - `setDefaultContentType(org.springframework.http.MediaType)`

### setServletContext

public void setServletContext(ServletContext servletContext)
Invoked by Spring to inject the ServletContext.

Specified by:
  `setServletContext` in interface `ServletContextAware`
Parameters:
  `servletContext` - the ServletContext object to be used by this object
See Also:
  - `InitializingBean.afterPropertiesSet()`
  - `ApplicationContextAware.setApplicationContext(org.springframework.context.ApplicationContext)`

### afterPropertiesSet

public void afterPropertiesSet()

Specified by:
  `afterPropertiesSet` in interface `org.springframework.beans.factory.InitializingBean`

### build

public ContentNegotiationManager build()
Create and initialize a `ContentNegotiationManager` instance.

Since:
  5.0

### getObject

@Nullable public ContentNegotiationManager getObject()

Specified by:
  `getObject` in interface `org.springframework.beans.factory.FactoryBean<ContentNegotiationManager>`

### getObjectType

public Class<?> getObjectType()

Specified by:
  `getObjectType` in interface `org.springframework.beans.factory.FactoryBean<ContentNegotiationManager>`

### isSingleton

public boolean isSingleton()

Specified by:
  `isSingleton` in interface `org.springframework.beans.factory.FactoryBean<ContentNegotiationManager>`