Class ContentNegotiatingViewResolver
- java.lang.Object
- org.springframework.context.support.ApplicationObjectSupport
- org.springframework.web.context.support.WebApplicationObjectSupport
- org.springframework.web.servlet.view.ContentNegotiatingViewResolver
- All Implemented Interfaces:
Aware,InitializingBean,ApplicationContextAware,Ordered,ServletContextAware,ViewResolver
public class ContentNegotiatingViewResolver extends WebApplicationObjectSupport implements ViewResolver, Ordered, InitializingBean
Implementation ofViewResolverthat resolves a view based on the request file name orAcceptheader.The
ContentNegotiatingViewResolverdoes not resolve views itself, but delegates to otherViewResolvers. By default, these other view resolvers are picked up automatically from the application context, though they can also be set explicitly by using theviewResolversproperty. Note that in order for this view resolver to work properly, theorderproperty needs to be set to a higher precedence than the others (the default isOrdered.HIGHEST_PRECEDENCE).This view resolver uses the requested media type to select a suitable
Viewfor a request. The requested media type is determined through the configuredContentNegotiationManager. Once the requested media type has been determined, this resolver queries each delegate view resolver for aViewand determines if the requested media type is compatible with the view's content type). The most compatible view is returned.Additionally, this view resolver exposes the
defaultViewsproperty, allowing you to override the views provided by the view resolvers. Note that these default views are offered as candidates, and still need have the content type requested (via file extension, parameter, orAcceptheader, described above).For example, if the request path is
/view.html, this view resolver will look for a view that has thetext/htmlcontent type (based on thehtmlfile extension). A request for/viewwith atext/htmlrequestAcceptheader has the same result.- Since:
- 3.0
- Author:
- Arjen Poutsma, Juergen Hoeller, Rossen Stoyanchev
- See Also:
ViewResolver,InternalResourceViewResolver,BeanNameViewResolver
Field Summary
Fields inherited from class org.springframework.context.support.ApplicationObjectSupport
logger
Fields inherited from interface org.springframework.core.Ordered
HIGHEST_PRECEDENCE, LOWEST_PRECEDENCE
Constructor Summary
Constructors Constructor Description ContentNegotiatingViewResolver()
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description voidafterPropertiesSet()Invoked by the containingBeanFactoryafter it has set all bean properties and satisfiedBeanFactoryAware,ApplicationContextAwareetc.ContentNegotiationManagergetContentNegotiationManager()Return theContentNegotiationManagerto use to determine requested media types.List<View>getDefaultViews()protected List<MediaType>getMediaTypes(HttpServletRequest request)Determines the list ofMediaTypefor the givenHttpServletRequest.intgetOrder()Get the order value of this object.List<ViewResolver>getViewResolvers()protected voidinitServletContext(ServletContext servletContext)Subclasses may override this for custom initialization based on the ServletContext that this application object runs in.booleanisUseNotAcceptableStatusCode()Whether to return HTTP Status 406 if no suitable is found.ViewresolveViewName(String viewName, Locale locale)Resolve the given view by name.voidsetContentNegotiationManager(ContentNegotiationManager contentNegotiationManager)Set theContentNegotiationManagerto use to determine requested media types.voidsetDefaultViews(List<View> defaultViews)Set the default views to use when a more specific view can not be obtained from theViewResolverchain.voidsetOrder(int order)voidsetUseNotAcceptableStatusCode(boolean useNotAcceptableStatusCode)Indicate whether a406 Not Acceptablestatus code should be returned if no suitable view can be found.voidsetViewResolvers(List<ViewResolver> viewResolvers)Sets the view resolvers to be wrapped by this view resolver.Methods inherited from class org.springframework.web.context.support.WebApplicationObjectSupport
getServletContext, getTempDir, getWebApplicationContext, initApplicationContext, isContextRequired, setServletContext
Methods inherited from class org.springframework.context.support.ApplicationObjectSupport
getApplicationContext, getMessageSourceAccessor, initApplicationContext, requiredContextClass, setApplicationContext
Constructor Detail
ContentNegotiatingViewResolver
public ContentNegotiatingViewResolver()
Method Detail
setContentNegotiationManager
public void setContentNegotiationManager(ContentNegotiationManager contentNegotiationManager)
Set theContentNegotiationManagerto use to determine requested media types.If not set, ContentNegotiationManager's default constructor will be used, applying a
HeaderContentNegotiationStrategy.- See Also:
ContentNegotiationManager()
getContentNegotiationManager
public ContentNegotiationManager getContentNegotiationManager()
Return theContentNegotiationManagerto use to determine requested media types.- Since:
- 4.1.9
setUseNotAcceptableStatusCode
public void setUseNotAcceptableStatusCode(boolean useNotAcceptableStatusCode)
Indicate whether a406 Not Acceptablestatus code should be returned if no suitable view can be found.Default is
false, meaning that this view resolver returnsnullforresolveViewName(String, Locale)when an acceptable view cannot be found. This will allow for view resolvers chaining. When this property is set totrue,resolveViewName(String, Locale)will respond with a view that sets the response status to406 Not Acceptableinstead.
isUseNotAcceptableStatusCode
public boolean isUseNotAcceptableStatusCode()
Whether to return HTTP Status 406 if no suitable is found.
setDefaultViews
public void setDefaultViews(List<View> defaultViews)
Set the default views to use when a more specific view can not be obtained from theViewResolverchain.
getDefaultViews
public List<View> getDefaultViews()
setViewResolvers
public void setViewResolvers(List<ViewResolver> viewResolvers)
Sets the view resolvers to be wrapped by this view resolver.If this property is not set, view resolvers will be detected automatically.
getViewResolvers
public List<ViewResolver> getViewResolvers()
setOrder
public void setOrder(int order)
getOrder
public int getOrder()
Description copied from interface:OrderedGet the order value of this object.Higher values are interpreted as lower priority. As a consequence, the object with the lowest value has the highest priority (somewhat analogous to Servlet
load-on-startupvalues).Same order values will result in arbitrary sort positions for the affected objects.
- Specified by:
getOrderin interfaceOrdered- Returns:
- the order value
- See Also:
Ordered.HIGHEST_PRECEDENCE,Ordered.LOWEST_PRECEDENCE
initServletContext
protected void initServletContext(ServletContext servletContext)
Description copied from class:WebApplicationObjectSupportSubclasses may override this for custom initialization based on the ServletContext that this application object runs in.The default implementation is empty. Called by
WebApplicationObjectSupport.initApplicationContext(org.springframework.context.ApplicationContext)as well asWebApplicationObjectSupport.setServletContext(javax.servlet.ServletContext).- Overrides:
initServletContextin classWebApplicationObjectSupport- Parameters:
servletContext- the ServletContext that this application object runs in (nevernull)
afterPropertiesSet
public void afterPropertiesSet()
Description copied from interface:InitializingBeanInvoked by the containingBeanFactoryafter it has set all bean properties and satisfiedBeanFactoryAware,ApplicationContextAwareetc.This method allows the bean instance to perform validation of its overall configuration and final initialization when all bean properties have been set.
- Specified by:
afterPropertiesSetin interfaceInitializingBean
resolveViewName
public View resolveViewName(String viewName, Locale locale) throws Exception
Description copied from interface:ViewResolverResolve the given view by name.Note: To allow for ViewResolver chaining, a ViewResolver should return
nullif a view with the given name is not defined in it. However, this is not required: Some ViewResolvers will always attempt to build View objects with the given name, unable to returnnull(rather throwing an exception when View creation failed).- Specified by:
resolveViewNamein interfaceViewResolver- Parameters:
viewName- name of the view to resolvelocale- Locale in which to resolve the view. ViewResolvers that support internationalization should respect this.- Returns:
- the View object, or
nullif not found (optional, to allow for ViewResolver chaining) - Throws:
Exception- if the view cannot be resolved (typically in case of problems creating an actual View object)
getMediaTypes
protected List<MediaType> getMediaTypes(HttpServletRequest request)
Determines the list ofMediaTypefor the givenHttpServletRequest.- Parameters:
request- the current servlet request- Returns:
- the list of media types requested, if any