我尝试向Spring REST API发出HTTP请求。API返回一个字符串值(“success”或“fail”)...但是我不知道如何在调用API时将响应类型设置为字符串值..其抛出错误,因为Backend返回代码200,body为:[object对象]
我的角代码如下所示,
order.service.ts
import { Injectable } from '@angular/core';
import { HttpClient, HttpHeaders } from '@angular/common/http';
import { ProductSearch } from '../_models/product-search';
import { ProductView } from '../_models/product-view';
import { Observable } from 'rxjs';
import { catchError } from 'rxjs/operators';
import { ErrorHandlerService } from './error-handler.service';
import { Category } from '../_models/category';
@Injectable({
providedIn: 'root'
})
export class OrderService {
constructor(private http: HttpClient, private errorHandlerService: ErrorHandlerService) { }
addToCart(productId: number, quantity: number): Observable<any> {
const headers = new HttpHeaders().set('Content-Type', 'text/plain; charset=utf-8');
console.log("--------order.service.ts----------addToCart()-------productId:"+productId+":------quantity:"+quantity);
return this.http.post<any>('http://localhost:8080/order/addtocart',
{ dealerId: 13, createdBy: "-1", productId: productId, quantity: quantity},
{headers: headers})
.pipe(catchError(this.errorHandlerService.handleError));
}
}
error-handler.service.ts
import { Injectable } from '@angular/core';
import { HttpErrorResponse, HttpResponse } from '@angular/common/http';
import { Observable, throwError } from 'rxjs';
import { catchError, retry } from 'rxjs/operators';
@Injectable({
providedIn: 'root'
})
export class ErrorHandlerService {
constructor() { }
public handleError(error: HttpErrorResponse) {
if (error.error instanceof ErrorEvent) {
// A client-side or network error occurred. Handle it accordingly.
console.error('An error occurred:', error.error.message);
} else {
// The backend returned an unsuccessful response code.
// The response body may contain clues as to what went wrong,
console.error(
`Backend returned code ${error.status}, ` +
`body was: ${error.error}`);
}
// return an observable with a user-facing error message
return throwError(
'Something bad happened; please try again later.');
};
}
9条答案
按热度按时间dfddblmv1#
你不应该使用这些头,头决定了你发送的类型,你显然是在发送一个对象,也就是JSON。
相反,您应该将选项
responseType
设置为text
:hjzp0vay2#
要消 debugging 误,请执行以下操作:
类型“text”不能分配给类型“json”。
阅读Angular HTTP指南并使用
responseType:'text'作为const
pjngdqdw3#
在你的后端,你应该添加:
前端(服务):
ovfsdjhp4#
使用如下:
pgccezyw5#
要修复编译器错误,请从post方法调用中删除泛型类型参数。
Angular不需要这个泛型类型参数,因为当responseType是“text”时,它应该总是返回一个字符串。
这样做
不是这个
出现错误是因为
responseType: 'text
时,post方法签名不包含泛型类型参数。请参阅下面的不同方法签名:
使用responseType:'json'(默认值)
**使用responseType:联系我们
请注意,泛型类型参数仅存在于类型'json'中。删除它以修复错误。
xoefb8l86#
对我来说,这种方式奏效了。LikerequestOptions作为object
ldfqzlk87#
HttpClient
的默认假设是'json'
responseType。如果你想把它改成'text'
,你应该这样做:f5emj3cl8#
默认情况下,angular返回responseType为Json,但我们可以根据您的需求配置以下类型。
例如:
wb1gzix09#
你有没有试过不设置responseType,而只是类型转换响应?
这就是我的工作: