Как отправить из Angular 5 через POST на контроллер Spring несколько RequestParams - PullRequest
0 голосов
/ 30 мая 2018

У меня есть этот Spring Controller:

@RequestMapping(value = "/create")
@ResponseBody
public ResponseEntity<?> create(
    @RequestParam String name,
    @RequestParam Integer startYear,
    @RequestParam Integer endYear,
    @RequestParam(required=false) MultipartFile polygons,
    @RequestParam(required=false) Long reference
) 

Можно ли отправить эти параметры из Angular через POST-запрос?

Я пытаюсь это:

public createExperiment(): Observable<any> {
    const headers = new HttpHeaders({'Content-Type': 'application/json'});
    return this.http.post(this.backUrl + 'puerto/create', {name:'name'}, {headers: headers})
      .map((res: any) =>
        res
      );
  }

Но я уже получаю эту ошибку:

ошибка: {отметка времени: 1527665099011, статус: 400, ошибка: «неверный запрос», исключение: «org.springframework.web.bind.MissingServletRequestParameterException», сообщение: «Обязательный строковый параметр name отсутствует»,…}

Почему я получаю эту ошибку?и если я это исправлю, могу ли я затем отправить MultiPartFile тоже?

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

Ответы [ 2 ]

0 голосов
/ 30 мая 2018

Работало с использованием formData и ('Content-Type', 'multipart / form-data');

  public createExperimentService(formData: FormData): Observable<any> {
        const headers = new HttpHeaders();
        headers.append('Content-Type', 'multipart/form-data');
        return this.http.post(this.backUrl + 'puerto/create', formData, {headers: headers})
          .map((res: any) =>
            res
          );
    }

  formData: FormData = new FormData();

  createExperiment() {
    this.formData.append('name', this.nameExperiment);
    this.formData.append('startYear', this.startYear);
    this.formData.append('endYear', this.endYear);
    this.formData.append('reference', this.reference);
    this.createExperimentService(this.formData).subscribe(res => {
      console.log(res);
    });
  }
  //This method loads a file
    fileChange(event) {
        const fileList: FileList = event.target.files;
        if (fileList.length > 0) {
          const file: File = fileList[0];
          this.formData.append('polygons', file, file.name);
        }
      }
0 голосов
/ 30 мая 2018

@RequestParam используется, когда у вас есть параметры URL.

http.post(url, null, { headers: headers, params: new HttpParams().set('name', 'fer') })

При этом имя будет отправлено вместе с URL-адресом, например http://abcd.com/a/b?name=fer

Если вы хотите отправить его как тело сообщения, определите модель в своем коде пружины и используйте @RequestBody аннотация в контроллере пружины.

Посмотрите здесь для примера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...