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
を使用することに問題はありますか?それとも将来的に何らかのエラーを引き起こす可能性がありますか?
Multipart
ファイルで@RequestParam
を使用しても問題ありません。
@RequestParamアノテーションを使用して、「multipart/form-data」リクエストの一部を、同じメソッド引数タイプをサポートするメソッド引数に関連付けることもできます。主な違いは、メソッドの引数が文字列でない場合、@ RequestParamは登録されたConverterまたはPropertyEditorによる型変換に依存し、@ RequestPartは要求部分の「Content-Type」ヘッダーを考慮してHttpMessageConvertersに依存することです。 @RequestParamは名前と値のフォームフィールドで使用される可能性が高く、@ RequestPartはより複雑なコンテンツ(JSON、XMLなど)を含むパーツで使用される可能性があります。
両方の注釈を使用できますが、内部で引数を解釈する方法に基づいて、注釈を選択できます。
Spring Docs は、両者の違いを非常に明確に示しています。
主な違いは、メソッドの引数が文字列ではない場合、
@RequestParam
は、登録されたConverterまたはPropertyEditor
による型変換に依存します@RequestPart
は、リクエストパーツの 'Content-Type'ヘッダーを考慮してHttpMessageConverters
に依存しています。@RequestPara
は名前と値のフォームフィールドで使用される可能性がありますが、@RequestPart
は、より複雑なコンテンツ(JSON、XMLなど)を含むパーツで使用される可能性があります。