org.springframework.web.multipart.support

## Class MultipartFilter

- java.lang.Object
- - org.springframework.web.filter.GenericFilterBean
  - - org.springframework.web.filter.OncePerRequestFilter
    - - org.springframework.web.multipart.support.MultipartFilter

- All Implemented Interfaces:
    Filter, Aware, BeanNameAware, DisposableBean, InitializingBean, EnvironmentAware, ServletContextAware

      public class MultipartFilter
      extends OncePerRequestFilter

  Servlet 2.3 Filter that resolves multipart requests via a MultipartResolver. in the root web application context.

  Looks up the MultipartResolver in Spring's root web application context. Supports a "multipartResolverBeanName" filter init-param in `web.xml`; the default bean name is "filterMultipartResolver". Looks up the MultipartResolver on each request, to avoid initialization order issues (when using ContextLoaderServlet, the root application context will get initialized after this filter).

  If no MultipartResolver bean is found, this filter falls back to a default MultipartResolver: `StandardServletMultipartResolver` for Servlet 3.0, based on a multipart-config section in `web.xml`.

  MultipartResolver lookup is customizable: Override this filter's `lookupMultipartResolver` method to use a custom MultipartResolver instance, for example if not using a Spring web application context. Note that the lookup method should not create a new MultipartResolver instance for each call but rather return a reference to a pre-built instance.

  Note: This filter is an alternative to using DispatcherServlet's MultipartResolver support, for example for web applications with custom web views which do not use Spring's web MVC, or for custom filters applied before a Spring MVC DispatcherServlet (e.g. `HiddenHttpMethodFilter`). In any case, this filter should not be combined with servlet-specific multipart resolution.

  Since:
    08.10.2003
  Author:
    Juergen Hoeller
  See Also:
    `setMultipartResolverBeanName(java.lang.String)`, `lookupMultipartResolver(javax.servlet.http.HttpServletRequest)`, `MultipartResolver`, `DispatcherServlet`

- - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `static String` | `DEFAULT_MULTIPART_RESOLVER_BEAN_NAME`

    - ### Fields inherited from class org.springframework.web.filter.OncePerRequestFilter

      `ALREADY_FILTERED_SUFFIX`

    - ### Fields inherited from class org.springframework.web.filter.GenericFilterBean

      `logger`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `MultipartFilter()`

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `protected void` | `doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)` Check for a multipart request via this filter's MultipartResolver, and wrap the original request with a MultipartHttpServletRequest if appropriate.
    `protected String` | `getMultipartResolverBeanName()` Return the bean name of the MultipartResolver to fetch from Spring's root application context.
    `protected MultipartResolver` | `lookupMultipartResolver()` Look for a MultipartResolver bean in the root web application context.
    `protected MultipartResolver` | `lookupMultipartResolver(HttpServletRequest request)` Look up the MultipartResolver that this filter should use, taking the current HTTP request as argument.
    `void` | `setMultipartResolverBeanName(String multipartResolverBeanName)` Set the bean name of the MultipartResolver to fetch from Spring's root application context.

    - ### Methods inherited from class org.springframework.web.filter.OncePerRequestFilter

      `doFilter, getAlreadyFilteredAttributeName, isAsyncDispatch, isAsyncStarted, shouldNotFilter, shouldNotFilterAsyncDispatch, shouldNotFilterErrorDispatch`

    - ### Methods inherited from class org.springframework.web.filter.GenericFilterBean

      `addRequiredProperty, afterPropertiesSet, destroy, getFilterConfig, getFilterName, getServletContext, init, initBeanWrapper, initFilterBean, setBeanName, setEnvironment, setServletContext`

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

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

- - ### Field Detail

    - #### DEFAULT_MULTIPART_RESOLVER_BEAN_NAME

          public static final String DEFAULT_MULTIPART_RESOLVER_BEAN_NAME

      See Also:
        Constant Field Values

  - ### Constructor Detail

    - #### MultipartFilter

          public MultipartFilter()

  - ### Method Detail

    - #### setMultipartResolverBeanName

          public void setMultipartResolverBeanName(String multipartResolverBeanName)

      Set the bean name of the MultipartResolver to fetch from Spring's root application context. Default is "filterMultipartResolver".

    - #### getMultipartResolverBeanName

          protected String getMultipartResolverBeanName()

      Return the bean name of the MultipartResolver to fetch from Spring's root application context.

    - #### doFilterInternal

          protected void doFilterInternal(HttpServletRequest request,
                                          HttpServletResponse response,
                                          FilterChain filterChain)
                                   throws ServletException,
                                          IOException

      Check for a multipart request via this filter's MultipartResolver, and wrap the original request with a MultipartHttpServletRequest if appropriate.

      All later elements in the filter chain, most importantly servlets, benefit from proper parameter extraction in the multipart case, and are able to cast to MultipartHttpServletRequest if they need to.

      Specified by:
        `doFilterInternal` in class `OncePerRequestFilter`
      Throws:
        `ServletException`
        `IOException`

    - #### lookupMultipartResolver

          protected MultipartResolver lookupMultipartResolver(HttpServletRequest request)

      Look up the MultipartResolver that this filter should use, taking the current HTTP request as argument.

      The default implementation delegates to the `lookupMultipartResolver` without arguments.

      Returns:
        the MultipartResolver to use
      See Also:
        `lookupMultipartResolver()`

    - #### lookupMultipartResolver

          protected MultipartResolver lookupMultipartResolver()

      Look for a MultipartResolver bean in the root web application context. Supports a "multipartResolverBeanName" filter init param; the default bean name is "filterMultipartResolver".

      This can be overridden to use a custom MultipartResolver instance, for example if not using a Spring web application context.

      Returns:
        the MultipartResolver instance, or `null` if none found