Я пытаюсь отправить массив строк с помощью почтового метода HttpClient на свой сервер.
getAnnouncementsByIds(ids: string[]): Observable<Announcement[]> {
return this.http.post<Announcement[]>(`${environment.serverUrl}${this.urlGetAnnouncementsByIds}`, ids);
}
Текущая ошибка: статус Http 400 с сообщением «Ошибка синтаксического анализа JSON: невозможно десериализовать значение типа [Ljava.lang.String;
из целочисленного значения (токен JsonToken.VALUE_NUMBER_INT
);
Я пробовал разные вещи, чтобы заставить его работать:
я не могу найти решение, как отправить массив в виде тела в запросе Http Post.
Кто-нибудь может мне помочь? Я уверен, что это должно быть довольно легко.
Вы можете обернуть массив объектом
getAnnouncementsByIds(ids: string[]): Observable<Announcement[]> {
// ids -> { ids }
return this.http.post<Announcement[]>(`${environment.serverUrl}${this.urlGetAnnouncementsByIds}`, { ids });
}
Таким образом, ваш бэкэнд получит это значение
{
ids: [...]
}
когда я оборачиваю массив таким объектом, как offeret, я все еще получаю http 400, но сообщение об ошибке изменилось: «Ошибка синтаксического анализа JSON: невозможно десериализовать значение типа [Ljava.lang.String;
из значения объекта (токен JsonToken.START_OBJECT
);
@mdyingstar Может быть, тогда это не вина Angular? Я использую обернутый массив в Angular, отправляю данные в Nest.js/Node.js, и он отлично работает.
Вы можете сделать такой объект:
export interface IdList{
ids: string[]
}
Первый вариант:
getAnnouncementsByIds(ids: string[]): Observable<Announcement[]> {
const rq = {ids = ids} as IdList
return this.http.post<Announcement[]>(`${environment.serverUrl}${this.urlGetAnnouncementsByIds}`, rq);
}
Второй вариант:
getAnnouncementsByIds(ids: IdList): Observable<Announcement[]> {
return this.http.post<Announcement[]>(`${environment.serverUrl}${this.urlGetAnnouncementsByIds}`, ids);
}
Ваши предложения помогли мне найти проблему. После того, как я реализовал ваш первый вариант, я отладил бэкэнд (весенняя загрузка). идентификаторы не пришли как ['1','2','3'], а были ['1,2,3']. С этими знаниями у меня все получилось. Спасибо.
Вы обязательно должны включить свой Java-код конечной точки, к которой вы пытаетесь сделать запрос. Можете ли вы также включить фактическую полезную нагрузку, которую вы отправляете со вкладки сети вашего браузера?