Обязательное тело запроса отсутствует весной, когда Angular отправлено сообщение - PullRequest
0 голосов
/ 19 февраля 2020

В моем приложении Angular я пытаюсь создать POST-запрос с телом json, который будет отправлен моему бэкэнду Spring Restful; Я создал службу в Angular для обработки метода API Post, но когда я пытаюсь отправить запрос, я получаю эту ошибку в моей интерфейсной консоли:

core.js:6014 ERROR HttpErrorResponse {headers: HttpHeaders, status: 0, statusText: "Unknown Error", url: "http://127.0.0.1:8080/center/search_1/page/0", ok: false, …}

и эта ошибка в моей внутренней консоли:

Required request body is missing: public org.springframework.data.domain.Page

Это код моей службы в Angular:

import {HttpClient, HttpHeaders, HttpParams} from '@angular/common/http';
import {FirstQuery} from '../../../_responseModels/firstQuery/first-query';
import {tap} from 'rxjs/operators';
import {stringify} from 'querystring';

@Injectable({
  providedIn: 'root'
})
export class ApiCenterSearch1Service {

  apiURL = 'http://127.0.0.1:8080/center/search_1/page/0';

  constructor(private httpClient: HttpClient) {}

  getFirstQuery(body: JSON): any {

    return  this.httpClient.post<FirstQuery[]>(this.apiURL, JSON.stringify(body),
      {
        headers : new HttpHeaders({'Content-Type': 'application/json'})
        // observe: 'response'
      });
  }

}

, и это часть кода компонента, который вызывает вызов API:

funcThis.apiCenterSearch1Service.getFirstQuery(JSON.parse(jsonRequest)).subscribe(
              res => {
                console.log(res);
              }); 

Я уже тестировал свой Spring API через Insomnia (приложение для тестирования API), и он работает без каких-либо проблем (и я также проверил, что JSON, требуемый серверной частью, хорошо отформатирован, поэтому я не думаю, что проблема в этом).

Где я делаю неправильно?

Ответы [ 3 ]

0 голосов
/ 19 февраля 2020

Измените свой код на этот код. Проблема может заключаться в том, что ваш бэкэнд хочет объект json, но вы отправляете строку.

import {HttpClient, HttpHeaders, HttpParams} from '@angular/common/http';
import {FirstQuery} from '../../../_responseModels/firstQuery/first-query';
import {tap} from 'rxjs/operators';
import {stringify} from 'querystring';

@Injectable({
  providedIn: 'root'
})
export class ApiCenterSearch1Service {

  apiURL = 'http://127.0.0.1:8080/center/search_1/page/0';

  constructor(private httpClient: HttpClient) {}

  getFirstQuery(body: Object): any {

    return  this.httpClient.post<FirstQuery[]>(this.apiURL, body,
      {
        headers : new HttpHeaders({'Content-Type': 'application/json'})
        // observe: 'response'
      });
  }

}

Служба

funcThis.apiCenterSearch1Service.getFirstQuery(jsonRequest).subscribe(
  res => {
    console.log(res);
  }); 
0 голосов
/ 20 февраля 2020

Я полностью исправил эту проблему, добавив в свое фоновое приложение аннотацию @CrossOrigin во всех точках входа API, чтобы включить политику CORS; так что это была не проблема переднего конца

0 голосов
/ 19 февраля 2020

Пожалуйста, попробуйте ниже код

import {HttpClient, HttpHeaders, HttpParams} from '@angular/common/http';
import {FirstQuery} from '../../../_responseModels/firstQuery/first-query';
import {tap} from 'rxjs/operators';
import {stringify} from 'querystring';

@Injectable({
  providedIn: 'root'
})
export class ApiCenterSearch1Service {

  apiURL = 'http://127.0.0.1:8080/center/search_1/page/0';

  constructor(private httpClient: HttpClient) {}

  getFirstQuery(body: any): any {

    return  this.httpClient.post<FirstQuery[]>(this.apiURL, body,
      {
        headers : new HttpHeaders({'Content-Type': 'application/json'})
        // observe: 'response'
      });
  }

}

И ваш сервисный код должен быть как

this.apiCenterSearch1Service.getFirstQuery(jsonRequest).subscribe(
          res => {
            console.log(res);
          }); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...