Search code examples
spring-bootmultipartspring-session

CommonsMultipartResolver and spring session disturb each other


There is the config of multi part config in spring boot

@Bean
public CommonsMultipartResolver multipartResolver() {
CommonsMultipartResolver resolver = new CommonsMultipartResolver();
resolver.setDefaultEncoding("utf-8");
resolver.setMaxInMemorySize(20480);
resolver.setMaxUploadSize(2048000000);
return resolver;
}

It is right and work successfully,when the below dependency is added

           <dependency>
                <groupId>org.springframework.session</groupId>
                <artifactId>spring-session</artifactId>
            </dependency>

the below exception is raised:

[ERROR] org.springframework.web.multipart.support.MissingServletRequestPartException: Required request part 'file' is not present Required request part 'file' is not present

Where is wrong?

EDIT:

It is related controller:

@RequestMapping(value={"/save"}, method={org.springframework.web.bind.annotation.RequestMethod.POST})
  @ResponseBody
  public FileProviderDto save(@RequestParam("file") MultipartFile file, @RequestParam String fileCode)
     throws IOException, SQLException
   {

Solution

  • I add this config and work correctly.

    @Bean
    public CommonsMultipartResolver multipartResolver() {
        CommonsMultipartResolver resolver = new CommonsMultipartResolver();
        resolver.setDefaultEncoding("utf-8");
        resolver.setMaxInMemorySize(20480);
        resolver.setMaxUploadSize(2048000000);
        return resolver;
    }
    
    @Bean
    @Order(0)
    public MultipartFilter multipartFilter() {
        MultipartFilter multipartFilter = new MultipartFilter();
        multipartFilter.setMultipartResolverBeanName("multipartResolver");
        return multipartFilter;
    }
    

    and skip MultipartAutoConfiguration.class like this:

    @SpringBootApplication(exclude = { MultipartAutoConfiguration.class })