Angular 8错误:解析http期间Http失败

时间:2019-07-03 06:26:13

标签: angular rxjs

尝试从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。

2 个答案:

答案 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);