web-dev-qa-db-ja.com

multipartfileに@RequestParamを使用するのは正しい方法ですか?

Spring MVCアプリケーションを開発していて、コントローラーでマルチパートリクエストを処理したいと考えています。リクエストでMultiPartFileも渡しています。現在、@RequestParamを使用してファイルパラメータを取得しています。メソッドは次のようになります。

@RequestMapping(method = RequestMethod.POST)
public def save(
        @ModelAttribute @Valid Product product,
        @RequestParam(value = "image", required = false) MultipartFile file) {
    .....
}

上記のコードは私のサービスでうまく機能し、ファイルはサーバー側で取得されています。今どこかで、ファイルの場合は@RequestPartではなく@RequestParamアノテーションを使用する必要があることがわかりました。ファイルに@RequestParamを使用することに問題はありますか?それとも将来的に何らかのエラーを引き起こす可能性がありますか?

15
Pranav C Balan

Multipartファイルで@RequestParamを使用しても問題ありません。

@RequestParamアノテーションを使用して、「multipart/form-data」リクエストの一部を、同じメソッド引数タイプをサポートするメソッド引数に関連付けることもできます。主な違いは、メソッドの引数が文字列でない場合、@ RequestParamは登録されたConverterまたはPropertyEditorによる型変換に依存し、@ RequestPartは要求部分の「Content-Type」ヘッダーを考慮してHttpMessageConvertersに依存することです。 @RequestParamは名前と値のフォームフィールドで使用される可能性が高く、@ RequestPartはより複雑なコンテンツ(JSON、XMLなど)を含むパーツで使用される可能性があります。

http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/bind/annotation/RequestPart.html を参照してください

11
Wilson

両方の注釈を使用できますが、内部で引数を解釈する方法に基づいて、注釈を選択できます。

Spring Docs は、両者の違いを非常に明確に示しています。

主な違いは、メソッドの引数が文字列ではない場合、@RequestParamは、登録されたConverterまたはPropertyEditorによる型変換に依存します@RequestPartは、リクエストパーツの 'Content-Type'ヘッダーを考慮してHttpMessageConvertersに依存しています。 @RequestParaは名前と値のフォームフィールドで使用される可能性がありますが、@RequestPartは、より複雑なコンテンツ(JSON、XMLなど)を含むパーツで使用される可能性があります。

1