Angular 8 и весенний загрузочный API, отсутствует необходимое тело запроса - PullRequest
0 голосов
/ 19 марта 2020

У меня маленькая проблема. Когда я отправляю запрос в мой API с Почтальоном, он работает, но когда я отправляю что-то с angular, ему не нравится.

Почтальон: запрос

Happy Spring:

@GetMapping("/searchs")
@CrossOrigin(origins = "http://localhost:4200")
public Collection<SearchFeedDTO> getFeed ( @RequestBody String data){
    System.out.println(data);
    System.out.println("I'm here");
    return null;
}

ответ сервера

Angular код:

// data = {test:"hello"};
getFeed(data):Observable<boolean>{

   return this.http.get<Answer>(`${this.baseUrl}api/searchs/`,data).pipe(
        map(res=>true),
        catchError(err=>{
            console.error(err);
            return of (false);
      })
   );
}

Sad Spring: "тело запроса необходимо отсутствует "

И Angular не рад, когда я пытаюсь это сделать.

return this.http.get<Answer>(`${this.baseUrl}api/searchs/`,{test:"test"}).pipe(

=> error" Нет перегрузки соответствует этому вызову ".

Есть идеи?

Большое спасибо!

Ответы [ 3 ]

1 голос
/ 19 марта 2020

HttpClient не поддерживает отправку тела в GET-запросе. На основании комментария @ vicb здесь :

IIR C RF C не препятствует GET-запросу иметь тело, но на практике большинство серверов не поддерживают это.

Из спецификации GET :

Полезная нагрузка в сообщении запроса GET не имеет определенной семантики; отправка тела полезной нагрузки по запросу GET может привести к тому, что некоторые существующие реализации отклонят запрос.

Таким образом, вам необходимо отправить запрос как POST или отправить данные как параметры запроса. Для нескольких данных вы можете поместить данные в объект и отправить строковую версию в качестве параметра запроса.

const test = {test: "test"};
return this.http.get(`${this.baseUrl}api/searchs/?test=` + encodeURIComponent(JSON.stringify(test));

И использовать переменную test в серверной части.

0 голосов
/ 19 марта 2020

Для выполнения HTTP-запроса вы должны реализовать подписчика, поскольку вы создаете запрос с помощью Observable.

0 голосов
/ 19 марта 2020

Обычно запрос Get не должен иметь body, поэтому angular httpclient.get также не принимает тело, либо вам нужно отправить данные на GET через параметры запроса

или изменить свой бэкэнд на POST, а затем использовать тело. Если ваше тело содержит только текст (не json), вам также необходимо добавить правильные заголовки в angular request

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