Загрузите объект JSON (информация о пользователе) и несколько изображений с одним запросом.Угловой + пружинный башмак - PullRequest
0 голосов
/ 22 мая 2018

Spring Rest Controller

 @PostMapping(consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
        public ResponseEntity<PersonDTO> createPerson(@RequestParam("user") User personDTO, @RequestParam("file") MultipartFile[] file){

      return new ResponseEntity<>(null, responseHeaders, HttpStatus.OK);
    }

Angular Service

createPerson(personClass : User, files : File[]): Observable<HttpEvent<{}>>{

  let formdata: FormData = new FormData();

  //Get Cities 
  var obj = JSON.parse(JSON.stringify(personClass.city));
  var myObj = {avatar:personClass.avatar,username:personClass.username , gender:personClass.gender, country:personClass.country, city:obj.code, about:personClass.about};

  //get upload images
  let fileCount: number = files.length;
  if (fileCount > 0) { // a file was selected
      for (let i = 0; i < fileCount; i++) {
          formdata.append('file', files[i]);
      }
  }


  const userBlob = new Blob([myObj],{ type: "application/json"});

  // User object to FormData
  formdata.append('user',JSON.stringify(myObj));


 return this.http.post(`${this.webServiceEndpoint}/person`,formdata)
 .map(res => res.json() )
 .catch(this.handleError);

}

Обратите внимание: если в Spring rest Controller я меняю тип параметра User на String, он работает, и несколько файлов могут читатьиз Spring rest controller.

Spring rest: пользовательский объект

 {"avatar":"","username":"","gender":"male","country":[],"about":"sdf"}

Вопрос: Как отправить запрос из Angular, чтобы в Spring я мог получить пользовательский объект вместо String.

1 Ответ

0 голосов
/ 23 мая 2018
public ResponseEntity<PersonDTO> createPerson(@RequestParam("user") User personDTO, @RequestParam("file") MultipartFile[] file){

необходимо изменить на

public ResponseEntity<PersonDTO> createPerson(@RequestPart("file") MultipartFile[] file, @RequestPart("user") User personDTO){

, чтобы пружинная загрузка знала, что эти параметры будут поступать как отдельные части.

...