2016-09-08 5 views
1

私は、以下のこのコントローラを持っている:MultiPartファイルを取得し、Springで1回のリクエストでデータをフォームする方法は?

@RequestMapping(value="/upload", method=RequestMethod.PUT) 
public ResponseEntity<String> handleFileUpload(
      @RequestParam("file") MultipartFile file, 
      @RequestBody Campaign inputCampaign, 
      Principal principal) { 

私は、ユーザーのビデオのためのデータを保持しているオブジェクトがある@RequestBody Campaign inputCampaignを、持っていない、とビデオをアップロードし、適切なディレクトリにそれを保存するたびにそれが正常に動作します。

しかし、アップロードしたファイルとキャンペーンに関連付けられたフォームデータを1回のリクエストで受け取り、キャンペーンに関する関連情報(タイトル、説明など)を保存できるようにしたいと思います。 。

私は上記のコントローラを使用しよう、と私はポストマンでリクエストを送信しようと、私は下に、このエラーが出る:

"timestamp": 1473349676109, 
    "status": 415, 
    "error": "Unsupported Media Type", 
    "exception": "org.springframework.web.HttpMediaTypeNotSupportedException", 
    "message": "Content type 'multipart/form-data;boundary=----WebKitFormBoundaryTVc9eDC2a2elulOx;charset=UTF-8' not supported", 
    "path": "/dashboard/upload" 

ここに私の郵便配達依頼のセットアップです:

Postman Request

1回のリクエストでキャンペーンフォームのデータとファイルを送信するにはどうすればよいですか?キャンペーンオブジェクトには多くのフィールドがありますので、各フォームフィールドのコントローラパラメータに@RequestParamを入れる必要はありません。 Jacksonはプロパティを自動的にマップする必要があります。

+0

どのようなタイプのファイルをそのRequestMappingに送信しようとしていますか? – px06

+0

@ px06は現在、jpg、png、およびmp4を送信できます。 '@RequestBody Campaign inputCampaign'を取り除くとすべて動作しますが、自動的に' Campaign'オブジェクトにマップされるファイルでフォームデータを受け取ることができます(SpringのJacksonライブラリがこれを自動的に行います) –

答えて

0

Jake。

注釈を両方削除してみましたか?

@PutMapping("/file/{fileName}") 
@ResponseBody 
public String[] postFile(
     @PathVariable(name = "fileName") String fileName, 
     List<MultipartFile> files, 
     User user 
) throws IOException { 
    return new String[]{ 
      fileName, 
      user.getUsername(), 
      files.stream() 
        .map((f)-> f.getOriginalFilename()) 
        .reduce("", (e, f)->e.concat(f).concat(", ")) 
    }; 
} 

私はList<MultipartFile> filesにいくつかのファイルをアップロードしようとした:

は、デモンストレーションの目的のために、私は以下のように単純なマッピングをしました。画像に示されるように

Sample output from Postman

、両方filesuserデータが自動的にマッピングされた任意の注釈は不要です。

希望します。

関連する問題