public abstract class AbstractMappingContentNegotiationStrategy extends MappingMediaTypeFileExtensionResolver implements ContentNegotiationStrategy
ContentNegotiationStrategy
implementations with the
steps to resolve a request to media types.
First a key (e.g. "json", "pdf") must be extracted from the request (e.g.
file extension, query param). The key must then be resolved to media type(s)
through the base class MappingMediaTypeFileExtensionResolver
which
stores such mappings.
The method handleNoMatch(org.springframework.web.context.request.NativeWebRequest, java.lang.String)
allow sub-classes to plug in additional
ways of looking up media types (e.g. through the Java Activation framework,
or ServletContext.getMimeType(java.lang.String)
. Media types resolved
via base classes are then added to the base class
MappingMediaTypeFileExtensionResolver
, i.e. cached for new lookups.
Constructor and Description |
---|
AbstractMappingContentNegotiationStrategy(Map<String,MediaType> mediaTypes)
Create an instance with the given map of file extensions and media types.
|
Modifier and Type | Method and Description |
---|---|
protected abstract String |
getMediaTypeKey(NativeWebRequest request)
Extract a key from the request to use to look up media types.
|
protected void |
handleMatch(String key,
MediaType mediaType)
Override to provide handling when a key is successfully resolved via
MappingMediaTypeFileExtensionResolver.lookupMediaType(java.lang.String) . |
protected MediaType |
handleNoMatch(NativeWebRequest request,
String key)
Override to provide handling when a key is not resolved via.
|
List<MediaType> |
resolveMediaTypeKey(NativeWebRequest webRequest,
String key)
An alternative to
resolveMediaTypes(NativeWebRequest) that accepts
an already extracted key. |
List<MediaType> |
resolveMediaTypes(NativeWebRequest webRequest)
Resolve the given request to a list of media types.
|
addMapping, getAllFileExtensions, getAllMediaTypes, lookupMediaType, resolveFileExtensions
public List<MediaType> resolveMediaTypes(NativeWebRequest webRequest) throws HttpMediaTypeNotAcceptableException
ContentNegotiationStrategy
resolveMediaTypes
in interface ContentNegotiationStrategy
webRequest
- the current requestnull
HttpMediaTypeNotAcceptableException
- if the requested media
types cannot be parsedpublic List<MediaType> resolveMediaTypeKey(NativeWebRequest webRequest, String key) throws HttpMediaTypeNotAcceptableException
resolveMediaTypes(NativeWebRequest)
that accepts
an already extracted key.HttpMediaTypeNotAcceptableException
protected abstract String getMediaTypeKey(NativeWebRequest request)
null
.protected void handleMatch(String key, MediaType mediaType)
MappingMediaTypeFileExtensionResolver.lookupMediaType(java.lang.String)
.protected MediaType handleNoMatch(NativeWebRequest request, String key) throws HttpMediaTypeNotAcceptableException
MappingMediaTypeFileExtensionResolver.lookupMediaType(java.lang.String)
. Sub-classes can take further steps to
determine the media type(s). If a MediaType is returned from
this method it will be added to the cache in the base class.