Top Description Fields Constructors Methods
org.springframework.web.servlet.config.annotation

public Class ContentNegotiationConfigurer

extends Object
Class Inheritance
Imports
java.util.Arrays, .HashMap, .List, .Map, jakarta.servlet.ServletContext, org.springframework.http.MediaType, .MediaTypeFactory, org.springframework.lang.Nullable, org.springframework.web.accept.ContentNegotiationManager, .ContentNegotiationManagerFactoryBean, .ContentNegotiationStrategy, .FixedContentNegotiationStrategy, .HeaderContentNegotiationStrategy, .ParameterContentNegotiationStrategy

Creates a ContentNegotiationManager and configures it with one or more 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 (as of 5.3) PathExtensionContentNegotiationStrategy Off
ignoreAcceptHeader false HeaderContentNegotiationStrategy Enabled
defaultContentType null FixedContentNegotiationStrategy Off
defaultContentTypeStrategy null ContentNegotiationStrategy Off

As of 5.0 you can set the exact strategies to use via strategies(List).

Note

if you must use URL-based content type resolution, the use of a query parameter is simpler and preferable to the use of a path extension since the latter can cause issues with URI variables, path parameters, and URI decoding. Consider setting favorPathExtension to false or otherwise set the strategies to use explicitly via strategies(List).

Author
Rossen Stoyanchev
Since
3.2

Field Summary

Modifier and TypeField and Description
private final ContentNegotiationManagerFactoryBean
private final Map<String, MediaType>

Constructor Summary

AccessConstructor and Description
public

Method Summary

Modifier and TypeMethod and Description
protected ContentNegotiationManager
buildContentNegotiationManager()

Build a ContentNegotiationManager based on this configurer's settings.

public ContentNegotiationConfigurer
defaultContentType(MediaType... defaultContentTypes)

Set the default content type(s) to use when no content type is requested in order of priority.

public ContentNegotiationConfigurer
defaultContentTypeStrategy(ContentNegotiationStrategy defaultStrategy)

Set a custom ContentNegotiationStrategy to use to determine the content type to use when no content type is requested.

public ContentNegotiationConfigurer
favorParameter(boolean favorParameter)

Whether a request parameter ("format" by default) should be used to determine the requested media type.

public ContentNegotiationConfigurer
favorPathExtension(boolean favorPathExtension)
Deprecated as of 5.2.4.

Whether the path extension in the URL path should be used to determine the requested media type.

public ContentNegotiationConfigurer
ignoreAcceptHeader(boolean ignoreAcceptHeader)

Whether to disable checking the 'Accept' request header.

public ContentNegotiationConfigurer
ignoreUnknownPathExtensions(boolean ignore)
Deprecated as of 5.2.4.

Whether to ignore requests with path extension that cannot be resolved to any media type.

public ContentNegotiationConfigurer
mediaType(String
the key to look up
extension
,
MediaType
the media type
mediaType
)

Add a mapping from a key, extracted from a path extension or a query parameter, to a MediaType.

public ContentNegotiationConfigurer
mediaTypes(Map<String, MediaType> mediaTypes)

An alternative to mediaType.

public ContentNegotiationConfigurer
parameterName(String parameterName)

Set the query parameter name to use when favorParameter is on.

public ContentNegotiationConfigurer
replaceMediaTypes(Map<String, MediaType> mediaTypes)

Similar to mediaType but for replacing existing mappings.

public void
strategies(List<ContentNegotiationStrategy>
the strategies to use
strategies
)

Set the exact list of strategies to use.

public ContentNegotiationConfigurer
useJaf(boolean useJaf)
Deprecated as of 5.0, in favor of useRegisteredExtensionsOnly(boolean) which has reverse behavior

When favorPathExtension is set, this property determines whether to allow use of JAF (Java Activation Framework) to resolve a path extension to a specific MediaType.

public ContentNegotiationConfigurer
useRegisteredExtensionsOnly(boolean useRegisteredExtensionsOnly)

When favorPathExtension is set, this property determines whether to use only registered MediaType mappings to resolve a path extension to a specific MediaType.

Inherited from java.lang.Object:
cloneequalsfinalizegetClasshashCodenotifynotifyAlltoStringwaitwaitwait

Field Detail

factoryback to summary
private final ContentNegotiationManagerFactoryBean factory
mediaTypesback to summary
private final Map<String, MediaType> mediaTypes

Constructor Detail

ContentNegotiationConfigurerback to summary
public ContentNegotiationConfigurer(ServletContext servletContext)

Class constructor with jakarta.servlet.ServletContext.

Method Detail

buildContentNegotiationManagerback to summary
protected ContentNegotiationManager buildContentNegotiationManager()

Build a ContentNegotiationManager based on this configurer's settings.

Since
4.3.12
See Also
ContentNegotiationManagerFactoryBean#getObject()
defaultContentTypeback to summary
public ContentNegotiationConfigurer defaultContentType(MediaType... defaultContentTypes)

Set the default content type(s) to use when no content type is requested in order of priority.

If destinations are present that do not support any of the given media types, consider appending MediaType#ALL at the end.

By default this is not set.

See Also
defaultContentTypeStrategy
defaultContentTypeStrategyback to summary
public ContentNegotiationConfigurer defaultContentTypeStrategy(ContentNegotiationStrategy defaultStrategy)

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
defaultContentType
favorParameterback to summary
public ContentNegotiationConfigurer favorParameter(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
parameterName(String)
favorPathExtensionback to summary
public ContentNegotiationConfigurer favorPathExtension(boolean favorPathExtension)

Deprecated

as of 5.2.4. See deprecation note on ContentNegotiationManagerFactoryBean#setFavorPathExtension(boolean).

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.

Annotations
@Deprecated
ignoreAcceptHeaderback to summary
public ContentNegotiationConfigurer ignoreAcceptHeader(boolean ignoreAcceptHeader)

Whether to disable checking the 'Accept' request header.

By default this value is set to false.

ignoreUnknownPathExtensionsback to summary
public ContentNegotiationConfigurer ignoreUnknownPathExtensions(boolean ignore)

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.

Annotations
@Deprecated
mediaTypeback to summary
public ContentNegotiationConfigurer mediaType(String extension, MediaType mediaType)

Add a mapping from a key, extracted from a path extension or a query parameter, to a MediaType. This is required in order for the parameter strategy to work. Any extensions explicitly registered here are also treated as safe for the purpose of Reflected File Download attack detection (see Spring Framework reference documentation for more details on RFD attack protection).

The path extension strategy will also try to use ServletContext#getMimeType and MediaTypeFactory to resolve path extensions. To change this behavior see the useRegisteredExtensionsOnly property.

Parameters
extension:String

the key to look up

mediaType:MediaType

the media type

See Also
mediaTypes(Map), replaceMediaTypes(Map)
mediaTypesback to summary
public ContentNegotiationConfigurer mediaTypes(Map<String, MediaType> mediaTypes)

An alternative to mediaType.

See Also
mediaType(String, MediaType), replaceMediaTypes(Map)
parameterNameback to summary
public ContentNegotiationConfigurer parameterName(String parameterName)

Set the query parameter name to use when favorParameter is on.

The default parameter name is "format".

replaceMediaTypesback to summary
public ContentNegotiationConfigurer replaceMediaTypes(Map<String, MediaType> mediaTypes)

Similar to mediaType but for replacing existing mappings.

See Also
mediaType(String, MediaType), mediaTypes(Map)
strategiesback to summary
public void strategies(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:List<ContentNegotiationStrategy>

the strategies to use

Since
5.0
useJafback to summary
public ContentNegotiationConfigurer useJaf(boolean useJaf)

Deprecated

as of 5.0, in favor of useRegisteredExtensionsOnly(boolean) which has reverse behavior

When favorPathExtension is set, this property determines whether to allow use of JAF (Java Activation Framework) to resolve a path extension to a specific MediaType.

Annotations
@Deprecated
useRegisteredExtensionsOnlyback to summary
public ContentNegotiationConfigurer useRegisteredExtensionsOnly(boolean useRegisteredExtensionsOnly)

When favorPathExtension is set, this property determines whether to use only registered MediaType mappings to resolve a path extension to a specific MediaType.

By default this is not set in which case PathExtensionContentNegotiationStrategy will use defaults if available.