use*_*630 8 java xml spring httpclient angular
const headers = new HttpHeaders({ 'Content-Type': 'text/xml' });
headers.append('Accept', 'text/xml');
headers.append('Content-Type', 'text/xml');
this.http.get('getxmlurl', {headers: headers}).subscribe(response => {
return '1234';
});
Run Code Online (Sandbox Code Playgroud)
嗨我正在使用angular 4 httpclient从spring控制器发出一个http get请求,它返回一个XML响应.
我遇到的问题是响应总是为空,即使我可以从chrome开发人员网络选项卡中看到xml响应.
我认为它可能与请求标题有关,angular 4默认为json但是我无法使用上面的代码更改请求标头.有人可以请一下建议.
谢谢
Mar*_*der 20
设置responseType为text:
this.http.get('getXmlUrl', { responseType: 'text' }).subscribe(response => {
console.log(response);
});
Run Code Online (Sandbox Code Playgroud)
允许的值responseType:
arraybufferblobjson (默认)textresponseType值确定如何解析成功的响应主体.
请参阅Angular Docs:
HttpRequest
#responseType HttpClient#request()
2019 Angular 7 以上 HttpClient 注释与代码
以文本或Xml 而非 Json 形式获取 Angular 响应
在写完之前的其他答案后,Angular 7 中可能发生了一些细微的变化。这就像 MA-Maddin 的答案的详细注释和代码。
@Injectable()
export class MyWidgetService
private myHttpClient: HttpClient;
constructor(httpClient: HttpClient) {
super(httpClient); // you MIGHT need this
this.myHttpClient = httpClient;
}
getResAsObservableStr = () => {
// Override the JSON Default Behavior.
// 3 special things for text from HttpClient
// a: Calling the raw .get('url') NOT get<string>('url')
// b: override observe: 'body'
// c: override responseType: 'text'
return this.myHttpClient.get('pathUrlForCall'
, { observe: 'body', responseType: 'text'} );
}
// In Calling Coponent
export class MyWidgetComponent
valAsStr: string;
constructor(
// more vars like Router...
private myWidgetSvcRef: MyWidgetService) { }
ngOnInit() {
this.getMyStrValFromWeb();
} // ngOnInit end
getMyStrValFromWeb = () => {
this.myWidgetSvcRef.getResAsObservableStr()
.subscribe(valAsStr => {this.valAsStr = valAsStr; });
} // end getMyStrValFromWeb
// in your html template (one possible scenario)
<someControl [(ngModel)]="valAsStr" > </someControl>
Run Code Online (Sandbox Code Playgroud)
这里的问题是 HttpHeaders 在角度上是不可变的。因此,您应该在创建对象时设置,而不是设置值。就像是
const headers = new HttpHeaders({ 'Content-Type': 'text/xml' }).set('Accept', 'text/xml');
Run Code Online (Sandbox Code Playgroud)
但您只设置请求标头。如果您希望响应为 text/xml。
this.http.get('getxmlurl', { headers: headers, responseType: text/xml }).subscribe(response => { return response; });
Run Code Online (Sandbox Code Playgroud)
除非您想设置请求标头,否则您可以删除标头。
| 归档时间: |
|
| 查看次数: |
20728 次 |
| 最近记录: |