Я получаю сообщение об ошибке при попытке вызвать службу из приложения Angular 8. Вот услуга:
const httpOptionsPlain = {
headers: new HttpHeaders({ 'Accept': 'text/plain',
'Content-Type': 'text/plain'
})
};
@Injectable()
export class TripService {
public getTripNameById(tripId: number): Observable<any> {
return this.http.get<any>(`${this.baseUrl}/Trips/Trip/Name/${tripId}`, httpOptionsPlain);
}
А вот Java rest api (отлично работает при вызове из браузера):
@GET
@Path("Trip/Name/{fundId}")
@Produces("text/plain")
public String getTripNameById(@PathParam("tripId") Integer tripId) {
return myDao.getNameById(tripId);
}
Я получаю сообщение об ошибке в консоли Chrome:
error: {error: SyntaxError: Unexpected token A in JSON at position 0 at JSON.parse () at XMLHtt…, text: "AAA BBB CCC"} headers: HttpHeaders {normalizedNames: Map(0), lazyUpdate: null, lazyInit: ƒ} message: "Http failure during parsing for http://localhost:8080/... name: "HttpErrorResponse"
Я отправляю обычный текст, поэтому служба не пытается разобрать json.





Пожалуйста попробуйте
const httpOptionsPlain = {
headers: new HttpHeaders({
'Accept': 'text/plain',
'Content-Type': 'text/plain'
}),
'responseType': 'text'
};
@Injectable()
export class TripService {
public getTripNameById(tripId: number): Observable<string> {
return this.http.get<string>(`${this.baseUrl}/Trips/Trip/Name/${tripId}`, httpOptionsPlain);
}
Я только что добавил ' к responseType
вы можете исправить заголовок, я получаю сообщение об ошибке "не формат json"
@ user2304483, может быть, вы ищете что-то вроде это?
HttpClient по умолчанию преобразует ответ в response.json(). Если вы API возвращает ответ, отличный от json, вы должны указать, что
this.http.get(url, {responseType: 'text'}).
В вашем коде сделайте его необобщенным, удалив возвращаемый тип <string>, чтобы он работал -
return this.http.get(`${this.baseUrl}/Trips/Trip/Name/${tripId}`, httpOptionsPlain);
Я могу подтвердить, что этот подход хорошо работает для решения этой проблемы.