2017-03-17 75 views
0

我想創建一個URI,其中MultipartFile和表單對象(bean)都是必需的。具有@RequestPart參數的表單對象導致404

的方法用下面的代碼工作:

@RequestMapping(method = RequestMethod.POST, consumes = MediaType.MULTIPART_FORM_DATA_VALUE) 
public void create(@RequestPart MultipartFile file, 
        @RequestPart String form) { 
    // ... 
} 

而下面捲曲命令:

curl -X POST http://localhost/files \ 
    -F [email protected]:\path\to\file \ 
    -F form={"x":0,"y":0,"width":512,"height":512} 

但只要我試圖通過一個bean來替換字符串,我得到一個404響應。

修改後的代碼,不工作,用豆:

@RequestMapping(method = RequestMethod.POST, consumes = MediaType.MULTIPART_FORM_DATA_VALUE) 
public void create(@RequestPart MultipartFile file, 
        @RequestPart ClipForm form) { 
    // ... 
} 

添加每個部分的Content-Type頭在捲曲似乎並沒有幫助:

curl -X POST http://localhost/files \ 
    -F [email protected]:\path\to\file;type=multipart/form-data \ 
    -F form={"x":0,"y":0,"width":512,"height":512};type=application/json 

我大概錯過了一些讓Spring認爲請求沒有映射到這個方法的東西,但是到目前爲止我無法得到什麼。

+0

不應該在你的捲曲字符串中使用'Content-Type'嗎? –

+0

不,'type'用於指定多部分請求的部件的內容類型。請參見[cURL手冊頁](https://curl.haxx.se/docs/manpage.html#-F)。 – kagmole

+0

在你的請求映射中你沒有指定'/ files'部分 - 它應該如何映射? –

回答

0

無論出於何種原因,引述在捲曲指揮一切,使用bash的作出這個工作。

curl -X 'POST' \ 
    -F '[email protected]:\path\to\file;type=multipart/form-data' \ 
    -F 'form={"x":0,"y":0,"width":512,"height":512};type=application/json' \ 
    'http://localhost/files' 

我猜一個字是由Windows CMD誤解。


編輯

如果你希望它在Windows CMD獲得工作,你將需要使用double quotes and escaped double quotes。它不會使用像bash這樣的單引號。

curl -X "POST"^
    -F "[email protected]:\path\to\file;type=multipart/form-data"^
    -F "form={\"x\":0,\"y\":0,\"width\":512,\"height\":512};type=application/json"^
    "http://localhost/files" 
相關問題