错误记录:Current request is not a multipart request
springboot 報錯:Current request is not a multipart request
這個一般是controller是帶有上傳文件的服務,類似@RequestParam MultipartFile[] file
解決:
首先檢查請求頭中的Content-Type是否設置對,如果把Content-Type設置成application/json是不行的
需要把Content-Type設置成multipart/form-data或著去掉Content-Type。
注意,去掉Content-Type,我自己測試的時候是不行的,但看很多網友都說可以,在此記錄一下。
還有一種可能就是你的請求url,是https的,而你用了http,也會報這個錯誤。
反思
通過spring源碼,我們看到報這個錯誤的地方在RequestParamMethodArgumentResolver類的handleMissingValue方法中。
看上圖,只有servletRequest為null,或者后面的MultipartResolutionDelegate.isMultipartRequest(servletRequest)是false,才會報這個錯,我們再看看MultipartResolutionDelegate.isMultipartRequest這個方法的邏輯:
看到這里,是不是很清晰了,就是簡單的判斷請求頭里的Content-Type,是不是以“multipart/”開頭的
而且,其實正常的請求,是進不到這個handleMissingValue方法的,我們再往前看這個方法的調用的地方:
在AbstractNamedValueMethodArgumentResolver類的resolveArgument方法中,有下圖這個邏輯:
我們可以看到,只有當入參的值arg為空,并且也沒有默認值,還要必傳的情況下,才會報這個錯。
所以,我們可以得到這個結論:凡是報這個Current request is not a multipart request錯的,其本質都是服務解析不到入參值,且這個值必傳,也沒有默認值。
Content-Type設置錯會這樣,https誤寫成http也會這樣,或許還有其他可能,但原理都是一樣的。
總結
以上是生活随笔為你收集整理的错误记录:Current request is not a multipart request的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CoreData 自定义数据类型
- 下一篇: [go]---从java到go(01)-