Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Spring Multipart File with @RequestBody

I am trying to upload data from an app to a spring backend service. Things to upload are a DataModel containing data of the object to create and several images linked to the data. Therefore I am using this method signature:

@RequestMapping(method = RequestMethod.POST)
@ResponseBody
public Survey createSurvey(@RequestBody SurveyPostHelper helper, @RequestParam(value="file", required = true) MultipartFile[] images)

I tried to play with the annotations, but either I get a blank images array or my helper is empty. How would you solve this?

Thanks in advance.

like image 512
Yannick Wiesner Avatar asked Feb 20 '17 21:02

Yannick Wiesner


2 Answers

I found out, that this method signature could do the job:

@ResponseBody
public Survey createSurvey(@RequestPart(required=true) SurveyPostHelper helper, @RequestPart(value="file", required = true) final MultipartFile[] images)

Important in my case was to set the MimeType in the client app. The files MimeType should be image/jpg and the SurveyPostHelpers to application/json to allow Spring to parse the json and bind it to my Object.

like image 185
Yannick Wiesner Avatar answered Sep 20 '22 00:09

Yannick Wiesner


see an example of the client code working for me images is the list of files I want to save

var formData = new FormData();

for (var i = 0; i < images.length ; i++) {
  formData.append('images', images[i]);
}

formData.append('adData', new Blob([JSON.stringify(adData)], {
    type: "application/json"
}));
like image 45
Cristian J. Brito Avatar answered Sep 20 '22 00:09

Cristian J. Brito