1.問題現象
寫在檔案上傳接口時,傳入參數有MultipartFile檔案和其他類型參數,如圖所示。
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIyZuBnL5AjN0MzN0MTMwEDOwAjMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
結果前端調用時報錯org.springframework.web.multipart.MultipartException: Current request is not a multipart request,并且發現orgId參數是會拼接到url中的,顯然沒有一起傳入。
2.問題分析
顯然從報錯資訊來說,是因為使用springboot制作excel表格上傳時候報錯,上傳檔案用的Content-Type應該是multipart/form-data,于是前端在接口content-type設定為application/json,上傳檔案接口測試去掉content-type屬性或content-type設定為multipart/form-data。但是發現仍然報相同的錯誤。于是上網查了一下各種解決思路,比如把MultipartFile檔案參數放在第一個,發現還是沒有用。
3.解決辦法
3.1 将檔案和其他參數封裝起來再傳入
正在我百思不得其解的時候,發現orgId參數是會拼接到url中的,顯然沒有一起傳入。于是考慮将兩個不同格式的參數封裝到實體類中傳入。
import lombok.Data;
import org.springframework.web.multipart.MultipartFile;
@Data
public class ImportUser {
private MultipartFile file;
private String orgId;
}
public ResponseBean ImportUsers(@RequestBody ImportUser importUser,HttpServletRequest request) throws Exception{
}
結果發現沒有報錯,問題解決了。
3.2 不指定傳入參數格式
但如果我不想每次上傳檔案都通過傳入實體類的方法,于是考慮不指定參數格式傳入。那就不去掉前面注解試試看。
public ResponseBean ImportUsers(MultipartFile file,String orgId,HttpServletRequest request) throws Exception {
}
發現依然沒有報錯了,說明不加注解的方法也可以解決問題。