我想知道在使用通用api服务调用各种端点时是否有办法检测observable中的响应格式。有些人发回JSON,有些则是纯文本。
this.http.get(endpoint).map(response => {
// if JSON
return response.json();
// else if plain text
return response.text();
})...
答案 0 :(得分:3)
角doc中存在void main(){
float v[10];
int n;
float x;
,但我从未在响应对象中找到此枚举,因此我使用了“技巧”:
ResponseContentType
如果有人知道我们在哪里可以找到this.http.get(endpoint).map(response => {
const contentType = res.headers.get('Content-type');
if (contentType == 'application/json') {
return response.json();
} else if (contentType == 'application/text') {
return response.text();
}
})...
枚举,请告诉我们!
答案 1 :(得分:2)
我无法找到使用Angular的内置方式来验证JSON,所以我只检查响应头中的内容类型。
这是我使用的功能:
/**
* True of the response content type is JSON.
*/
private static isJson(value: Response): boolean {
return /\bapplication\/json\b/.test(value.headers.get('Content-Type'));
}
Content-Type
可以在字符串中添加额外的东西,所以我使用正则表达式是安全的。
如果不是JSON,我会建议失败。
this.http.get().map((value:Response)=>{
if(this.isJson(value)) {
return value;
}
throw value;
});
然后,您可以在订阅者中捕获已知的JSON响应。现在您知道订阅者中的所有响应都获得了JSON。