尝试从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控制台中遇到错误:
错误:{错误:语法错误:在XMLHtt…的JSON.parse()位置0处的JSON中的意外令牌A,文本:“ AAA BBB CCC”} 标头:HttpHeaders {normalizedNames:Map(0),lazyUpdate:空,lazyInit:ƒ} 消息:“ http://localhost:8080/解析期间Http失败... 名称:“ HttpErrorResponse”
我正在发送纯文本,所以我不是为什么该服务尝试解析json。
答案 0 :(得分:0)
请尝试
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
答案 1 :(得分:0)
HttpClient默认将响应转换为response.json()。如果您的API返回非json响应,则必须指定
this.http.get(url, {responseType: 'text'}).
在您的代码中,通过删除<string>
返回类型使其正常工作来使其非通用-
return this.http.get(`${this.baseUrl}/Trips/Trip/Name/${tripId}`, httpOptionsPlain);