2015-10-09 14 views
7

@RequestBodyを使用してファイルのデータを取得しようとしているため、ファイルをアップロードしようとしていますが、ファイルをアップロードしようとしているときに415エラーコードが表示されています。JavaのRequestBodyからファイルデータを取得できないのはなぜですか?

私はグーグル(ファイルをアップロードするための解決策を得ました)、リクエストボディからファイルデータを取得できないことを知りました。だから私は、なぜ私はリクエストボディからファイルのデータにアクセスすることができないのか知りたいのですが、データがHTTPリクエストのリクエストボディに送られるので、ファイルをアップロードする際にリクエストがどのように起こっているのか知りたいです。

私のサーバーコードの前に:

@RequestMapping(value = "/upload",headers = "Content-Type=multipart/form-data", method = RequestMethod.POST) 
@ResponseBody 
public String upload(@RequestBody MultipartFile file) 
{ 
} 

ソリューション:

@RequestMapping(value = "/upload",headers = "Content-Type=multipart/form-data", method = RequestMethod.POST) 
@ResponseBody 
public String upload(MultipartHttpServletRequest request) 
{ 
} 
+0

((@RequestParamをアップロードし、この.. @RequestMapping(値= "/アップロード"、ヘッダは= "Content-Typeの=マルチパート/フォームのデータ"、方法= RequestMethod.POST) @ResponseBody 公共の文字列を試してみてください"file")MultipartFile uploadFile) { } –

+0

私はそれがうまくいくことを知っています。私が@RequestBody – Labeo

答えて

5

技術的には、完全なマルチパートリクエストボディを解析する独自のHttpMessageConverterを書くことができますが、すべての部分を処理できる非常に特定のターゲットタイプが必要です。

あなたは、メソッドのパラメータを示す注釈は、Webリクエストのボディ にバインドする必要があります@RequestBody

のjavadocのからわかります。

要求本体全体をメソッドパラメータにバインドすることを意図していること。どのようにしてマルチパートリクエストのすべての部分を単一のパラメータにバインドしますか? MultiValueMap<String, Object>which is what FormHttpMessageConverter uses when writing a multipart request)のようなものです。しかし、それはそれぞれの価値のタイプをチェックしなければならないので、あまり有用ではありません。

それはあなたが必要な正確に何を指定するには、開発者として、より多くの意味があります。そのため、@RequestParam@RequestPartが利用可能です。

3

ファイルがリクエストボディではありませんので、彼らはそれの一部であり、組み込みのHttpMessageConverter変換できることはありませんMultiPartFileの配列に対する要求それは@RequestParam("file") MultipartFile[] files

代わりの

@RequestBody MultipartFile file 

働く理由 ザッツはそれがお役に立てば幸いです。

関連する問題