springboot使用CommonsMultipartResolver上傳報錯java.lang.ClassCastException


今天寫了一個上傳文件的接口,部分代碼如下:

@PostMapping("/upload")
public Response<String> uploadPic(HttpServletRequest request) {
    Response<String> result = new Response<>();
  // 創建一個通用的多部分解析器
  CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(request.getSession().getServletContext());
  if (!multipartResolver.isMultipart(request)) {
    LOG.error("上傳文件錯誤!");
  }

  // request轉換成multiRequest
  MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest) request;
}

debug的時候發現request轉換的那一行報錯如下:

java.lang.ClassCastException: org.springframework.web.multipart.support.StandardMultipartHttpServletRequest$StandardMultipartFile cannot be cast to org.springframework.web.multipart.commons.CommonsMultipartFile

百度了一下,發現一堆解決方案,千篇一律,竟沒有一個有用的,不禁吐槽一句:是百度垃圾還是我們國內的程序員們???最終,經過自己不懈的努力找到了最佳的解決方案,記錄一下,防止以后忘記,又要百度。。。

 

一、原因分析:

Spring Boot默認會實例化一個MultipartResolver(StandardServletMultipartResolver)來處理上傳文件,所以這里強轉的話就會報以上類型轉換錯誤。

 

二、解決方案:

1、如果要使用CommonsMultipartResolver,需要在application.properties里面添加一句:

spring.servlet.multipart.enabled=false

(注意是false,這樣就會禁用StandardServletMultipartResolver,網上很多LJ文章居然說是true)。

 

2、自己手動創建一個CommonsMultipartResolver,代碼就是我最上面的代碼,然后在把HttpServletRequest轉換成MultipartHttpServletRequest這一步的時候,使用如下代碼:

// request轉換成multiRequest
MultipartHttpServletRequest multiRequest = multipartResolver.resolveMultipart(request);

  

至此,不再報錯,完美解決!!!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM