2017-03-17 5 views
0

MultipartFileとフォームオブジェクト(bean)の両方が必要なURIを作成しようとしています。@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} 

しかし、すぐに、私は豆で文字列を置換しようとして、私が手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が要求をこのメソッドにマップしていないと思うようにするものがありませんでしたが、これまでは何も取得できません。 カールコマンドのすべてを引用し、bashのを使用して何らかの理由で

+0

あなたのカール文字列に 'type-type'を' type'してはいけませんか? –

+0

いいえ、「タイプ」は、マルチパートリクエストの場合にパーツのコンテンツタイプを指定するために使用されます。 [cURLマンページ](https://curl.haxx.se/docs/manpage.html#-F)を参照してください。あなたのリクエストマッピングに – kagmole

+0

がありますが、 '/ファイル'の部分は指定されていません。 –

答えて

0

は、この作業を行いました。

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によって誤解されたと思います。


EDIT

あなたはそれが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"