org.springframework.web.servlet.view

## 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 of `ViewResolver` that resolves a view based on the request file name or `Accept` header.

  The `ContentNegotiatingViewResolver` does not resolve views itself, but delegates to other `ViewResolver`s. By default, these other view resolvers are picked up automatically from the application context, though they can also be set explicitly by using the `viewResolvers` property. Note that in order for this view resolver to work properly, the `order` property needs to be set to a higher precedence than the others (the default is `Ordered.HIGHEST_PRECEDENCE`.)

  This view resolver uses the requested media type to select a suitable `View` for a request. The requested media type is determined through the configured `ContentNegotiationManager`. Once the requested media type has been determined, this resolver queries each delegate view resolver for a `View` and 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 `defaultViews` property, allowing you to override the views provided by the view resolvers. Note that these default views are offered as candicates, and still need have the content type requested (via file extension, parameter, or `Accept` header, described above). You can also set the default content type directly, which will be returned when the other mechanisms (`Accept` header, file extension or parameter) do not result in a match.

  For example, if the request path is `/view.html`, this view resolver will look for a view that has the `text/html` content type (based on the `html` file extension). A request for `/view` with a `text/html` request `Accept` header has the same result.

  Since:
    3.0
  Author:
    Arjen Poutsma, Juergen Hoeller, Rossen Stoyanchev
  See Also:
    `ViewResolver`, `InternalResourceViewResolver`, `BeanNameViewResolver`

- - ### Field Summary

    - ### Fields inherited from interface org.springframework.core.Ordered

      `HIGHEST_PRECEDENCE, LOWEST_PRECEDENCE`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `ContentNegotiatingViewResolver()`

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `void` | `afterPropertiesSet()` Invoked by a BeanFactory after it has set all bean properties supplied (and satisfied BeanFactoryAware and ApplicationContextAware).
    `protected List<MediaType>` | `getMediaTypes(HttpServletRequest request)` Determines the list of `MediaType` for the given `HttpServletRequest`.
    `int` | `getOrder()` Return the order value of this object, with a higher value meaning greater in terms of sorting.
    `protected void` | `initServletContext(ServletContext servletContext)` Subclasses may override this for custom initialization based on the ServletContext that this application object runs in.
    `View` | `resolveViewName(String viewName, Locale locale)` Resolve the given view by name.
    `void` | `setContentNegotiationManager(ContentNegotiationManager contentNegotiationManager)` Set the `ContentNegotiationManager` to use to determine requested media types.
    `void` | `setDefaultContentType(MediaType defaultContentType)` Deprecated. use `setContentNegotiationManager(ContentNegotiationManager)`
    `void` | `setDefaultViews(List<View> defaultViews)` Set the default views to use when a more specific view can not be obtained from the `ViewResolver` chain.
    `void` | `setFavorParameter(boolean favorParameter)` Deprecated. use `setContentNegotiationManager(ContentNegotiationManager)`
    `void` | `setFavorPathExtension(boolean favorPathExtension)` Deprecated. use `setContentNegotiationManager(ContentNegotiationManager)`
    `void` | `setIgnoreAcceptHeader(boolean ignoreAcceptHeader)` Deprecated. use `setContentNegotiationManager(ContentNegotiationManager)`
    `void` | `setMediaTypes(Map<String,String> mediaTypes)` Deprecated. use `setContentNegotiationManager(ContentNegotiationManager)`
    `void` | `setOrder(int order)`
    `void` | `setParameterName(String parameterName)` Deprecated. use `setContentNegotiationManager(ContentNegotiationManager)`
    `void` | `setUseJaf(boolean useJaf)` Deprecated. use `setContentNegotiationManager(ContentNegotiationManager)`
    `void` | `setUseNotAcceptableStatusCode(boolean useNotAcceptableStatusCode)` Indicate whether a `406 Not Acceptable` status code should be returned if no suitable view can be found.
    `void` | `setViewResolvers(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`

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

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

- - ### Constructor Detail

    - #### ContentNegotiatingViewResolver

          public ContentNegotiatingViewResolver()

  - ### Method Detail

    - #### setOrder

          public void setOrder(int order)

    - #### getOrder

          public int getOrder()

      Description copied from interface: `Ordered`
      Return the order value of this object, with a higher value meaning greater in terms of sorting.

      Normally starting with 0, with `Integer.MAX_VALUE` indicating the greatest value. Same order values will result in arbitrary positions for the affected objects.

      Higher values can be interpreted as lower priority. As a consequence, the object with the lowest value has highest priority (somewhat analogous to Servlet "load-on-startup" values).

      Specified by:
        `getOrder` in interface `Ordered`
      Returns:
        the order value

    - #### setContentNegotiationManager

          public void setContentNegotiationManager(ContentNegotiationManager contentNegotiationManager)

      Set the `ContentNegotiationManager` to use to determine requested media types.

      If not set, ContentNegotiationManager's default constructor will be used, applying a `HeaderContentNegotiationStrategy`.

      See Also:
        `ContentNegotiationManager.ContentNegotiationManager()`

    - #### setFavorPathExtension

          @Deprecated
          public void setFavorPathExtension(boolean favorPathExtension)

      Deprecated. use `setContentNegotiationManager(ContentNegotiationManager)`
      Indicate whether the extension of the request path should be used to determine the requested media type, in favor of looking at the `Accept` header. The default value is `true`.

      For instance, when this flag is `true` (the default), a request for `/hotels.pdf` will result in an `AbstractPdfView` being resolved, while the `Accept` header can be the browser-defined `text/html,application/xhtml+xml`.

    - #### setUseJaf

          @Deprecated
          public void setUseJaf(boolean useJaf)

      Deprecated. use `setContentNegotiationManager(ContentNegotiationManager)`
      Indicate whether to use the Java Activation Framework to map from file extensions to media types.

      Default is `true`, i.e. the Java Activation Framework is used (if available).

    - #### setFavorParameter

          @Deprecated
          public void setFavorParameter(boolean favorParameter)

      Deprecated. use `setContentNegotiationManager(ContentNegotiationManager)`
      Indicate whether a request parameter should be used to determine the requested media type, in favor of looking at the `Accept` header. The default value is `false`.

      For instance, when this flag is `true`, a request for `/hotels?format=pdf` will result in an `AbstractPdfView` being resolved, while the `Accept` header can be the browser-defined `text/html,application/xhtml+xml`.

    - #### setParameterName

          @Deprecated
          public void setParameterName(String parameterName)

      Deprecated. use `setContentNegotiationManager(ContentNegotiationManager)`
      Set the parameter name that can be used to determine the requested media type if the `setFavorParameter(boolean)` property is `true`. The default parameter name is `format`.

    - #### setIgnoreAcceptHeader

          @Deprecated
          public void setIgnoreAcceptHeader(boolean ignoreAcceptHeader)

      Deprecated. use `setContentNegotiationManager(ContentNegotiationManager)`
      Indicate whether the HTTP `Accept` header should be ignored. Default is `false`.

      If set to `true`, this view resolver will only refer to the file extension and/or parameter, as indicated by the `favorPathExtension` and `favorParameter` properties.

    - #### setMediaTypes

          @Deprecated
          public void setMediaTypes(Map<String,String> mediaTypes)

      Deprecated. use `setContentNegotiationManager(ContentNegotiationManager)`
      Set the mapping from file extensions to media types.

      When this mapping is not set or when an extension is not present, this view resolver will fall back to using a `FileTypeMap` when the Java Action Framework is available.

    - #### setDefaultContentType

          @Deprecated
          public void setDefaultContentType(MediaType defaultContentType)

      Deprecated. use `setContentNegotiationManager(ContentNegotiationManager)`
      Set the default content type.

      This content type will be used when file extension, parameter, nor `Accept` header define a content-type, either through being disabled or empty.

    - #### setUseNotAcceptableStatusCode

          public void setUseNotAcceptableStatusCode(boolean useNotAcceptableStatusCode)

      Indicate whether a `406 Not Acceptable` status code should be returned if no suitable view can be found.

      Default is `false`, meaning that this view resolver returns `null` for `resolveViewName(String, Locale)` when an acceptable view cannot be found. This will allow for view resolvers chaining. When this property is set to `true`, `resolveViewName(String, Locale)` will respond with a view that sets the response status to `406 Not Acceptable` instead.

    - #### setDefaultViews

          public void setDefaultViews(List<View> defaultViews)

      Set the default views to use when a more specific view can not be obtained from the `ViewResolver` chain.

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

    - #### initServletContext

          protected void initServletContext(ServletContext servletContext)

      Description copied from class: `WebApplicationObjectSupport`
      Subclasses 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 as `WebApplicationObjectSupport.setServletContext(javax.servlet.ServletContext)`.

      Overrides:
        `initServletContext` in class `WebApplicationObjectSupport`
      Parameters:
        `servletContext` - the ServletContext that this application object runs in (never `null`)

    - #### afterPropertiesSet

          public void afterPropertiesSet()

      Description copied from interface: `InitializingBean`
      Invoked by a BeanFactory after it has set all bean properties supplied (and satisfied BeanFactoryAware and ApplicationContextAware).

      This method allows the bean instance to perform initialization only possible when all bean properties have been set and to throw an exception in the event of misconfiguration.

      Specified by:
        `afterPropertiesSet` in interface `InitializingBean`

    - #### resolveViewName

          public View resolveViewName(String viewName,
                             Locale locale)
                               throws Exception

      Description copied from interface: `ViewResolver`
      Resolve the given view by name.

      Note: To allow for ViewResolver chaining, a ViewResolver should return `null` if 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 return `null` (rather throwing an exception when View creation failed).

      Specified by:
        `resolveViewName` in interface `ViewResolver`
      Parameters:
        `viewName` - name of the view to resolve
        `locale` - Locale in which to resolve the view. ViewResolvers that support internationalization should respect this.
      Returns:
        the View object, or `null` if 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 of `MediaType` for the given `HttpServletRequest`.
      Parameters:
        `request` - the current servlet request
      Returns:
        the list of media types requested, if any