Spring MVC サーバーで、ファイル (画像) といくつかの JSON メタデータを含む multipart/form-data リクエストを受信したいと考えています。JSON 部分が Content-Type=application/json である、整形式のマルチパート リクエストを構築できます。
Spring サービスの形式は次のとおりです。
@RequestMapping(value = MY_URL, method=RequestMethod.POST, headers="Content-Type=multipart/form-data")
public void myMethod(@RequestParam("image") MultipartFile file, @RequestParam("json") MyClass myClass) {
...
}
ファイルは正しくアップロードされましたが、JSON 部分で問題が発生しました。次のエラーが発生します:
"
org.springframework.beans.ConversionNotSupportedException: 型 'java.lang.String' の値を必要な型 'myPackage.MyClass' に変換できませんでした。ネストされた例外は java.lang.IllegalStateException です: 型 [java.lang.String] の値を必要な型 [myPackage.MyClass] に変換できません: 一致するエディターまたは変換戦略が見つかりません
マルチパートリクエストを使用しない場合、JSON 変換は Jackson 2 で正常に機能しますが、マルチパートを使用すると前述のエラーが発生します。メッセージの一部として JSON をサポートするようにマルチパート メッセージ コンバーターを構成する必要があると思いますが、その方法がわかりません。これが私の構成です:
mvc:annotation-driven
mvc:message-converters
</mvc:message-converters>
</mvc:annotation-driven>
MyClass の代わりに myClass のタイプとして String を使用しますが、Spring MVC を使用したい場合引数の変換がサポートされており、それらはすべて非常にうまく機能します。
@RequestParam の代わりに @RequestPart アノテーションを使用すると、実際にはメッセージ コンバーターを通じてパラメーターが渡されます。したがって、コントローラーのメソッドを次のように変更すると、述べたように機能するはずです。
@RequestMapping(value = MY_URL, method=RequestMethod.POST, headers="Content-Type=multipart/form-data")
public void myMethod(@RequestParam("image") MultipartFile file, @RequestPart("json") MyClass myClass) {
...
}
詳細については、Spring リファレンス ガイドを参照してください: http://docs.spring.io/spring/docs/4.0.x/spring-framework-reference/html/mvc.html#mvc-multipart-forms-non -ブラウザ