spring mvc は multipart/form-data 用の JSON メッセージコンバータを追加します

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 -ブラウザ

おすすめ

転載: blog.csdn.net/qq_41604890/article/details/128235436