Не удается отправить многокомпонентный запрос с использованием угловых реактивных форм - PullRequest
0 голосов
/ 22 октября 2019

Мой бэкэнд-API Java ожидает многочастный запрос POST для формы на внешнем интерфейсе Angular, которая в настоящее время использует реактивные формы. Конечная точка выглядит следующим образом:

  @PostMapping("/submit")
  public ResponseEntity<?> submit(
      @RequestParam String requester,
      @RequestParam String subject,
      @RequestParam String description,
      @RequestParam String htmlBody,
      @RequestParam String customFieldValues,
      @RequestParam List<MultipartFile> attachments) {

    return myBackendService.submitToZendesk(
        requester, subject, description, htmlBody, customFieldValues, attachments);
  }

Функция отправки в компоненте Angular выглядит следующим образом (в настоящее время используются поддельные данные формы):

  public onSubmit(): void {
    const formData = new FormData();
    formData.append('requester', 'ryan');
    formData.append('subject', 'Test Subject',);
    formData.append('description', 'test desc',);
    formData.append('htmlBody', '',);
    formData.append('customFieldValues', 'test');
    this.frontendService.submitForm(formData).subscribe(
      res => console.log(res),
      err => this.onHandleError(err)
    );
  }

Служба:

  public submitForm(payload: any): Observable<any> {
    return this.resourceService.submitForm(payload)
  }

И, наконец, служба ресурсов:

  public submitShippingAuth(payload: ShippingAuthRequest): Observable<any> {
    const url = `${environment.api}/submit`
    return this.http.post(`${url}`, payload)
      .pipe(map(this.extractResponse), catchError(this.handleError))
  }

Я получаю код состояния 400 с сообщением:

error: "Bad Request"
message: "Required String parameter 'requester' is not present"
path: "/v1/submit"
status: 400
timestamp: 1571771034002
trace: "org.springframework.web.bind.MissingServletRequestParameterException: Required String parameter 'requester' is not present

Но полезная нагрузка моего запроса, безусловно, имеет вид-данные:

------WebKitFormBoundaryTIuEnyoDjbqZHnFA
Content-Disposition: form-data; name="requester"

ryan
------WebKitFormBoundaryTIuEnyoDjbqZHnFA
Content-Disposition: form-data; name="subject"

Test Subject
------WebKitFormBoundaryTIuEnyoDjbqZHnFA
Content-Disposition: form-data; name="description"

test desc
------WebKitFormBoundaryTIuEnyoDjbqZHnFA
Content-Disposition: form-data; name="htmlBody"


------WebKitFormBoundaryTIuEnyoDjbqZHnFA
Content-Disposition: form-data; name="customFieldValues"

test
------WebKitFormBoundaryTIuEnyoDjbqZHnFA--

Кто-нибудь знает, что я здесь не так делаю? Форма-данные POST в Почтальоне работает.

Ответы [ 2 ]

0 голосов
/ 23 октября 2019

Функция отправки, безусловно, выглядит хорошо, третий аргумент в formData.append - это имя файла, поэтому оно не нужно. Единственное, что я обнаружил, это то, что вы не установили заголовки в запросе http post. Я предполагаю, что вы используете interceptors для этого, если нет, попробуйте это сделать.

0 голосов
/ 22 октября 2019

Строка для печати реквестера должна содержать запятую (,), как показано ниже formData.append ('requestter', 'ryan',);

Надеюсь, это решит вашу проблему.

...