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';
});
こんにちは、angular 4 httpclientを使用して、XML応答を返すスプリングコントローラーからhttp get要求を作成しています。
私が抱えている問題は、chrome開発者ネットワーク]タブからxml応答を見ることができるにもかかわらず、応答が常にNULLであるということです。
angular 4のデフォルトはjsonですが、上記のコードでリクエストヘッダーを変更することはできません。誰かにアドバイスしてください。
ありがとう
responseType
をtext
に設定します。
this.http.get('getXmlUrl', { responseType: 'text' }).subscribe(response => {
console.log(response);
});
responseType
に許可される値:
arraybuffer
blob
json
(デフォルト)text
ResponseType値は、成功した応答本文の解析方法を決定します。
Angular Docs:
HttpRequest#responseType
HttpClient#request()
ここでの問題は、HttpHeadersが角度的に不変であることです。したがって、値を設定する代わりに、オブジェクトの作成時に設定する必要があります。何かのようなもの
const headers = new HttpHeaders({ 'Content-Type': 'text/xml' }).set('Accept', 'text/xml');
ただし、リクエストヘッダーのみを設定しています。応答をtext/xmlにする場合。
this.http.get('getxmlurl', { headers: headers, responseType: text/xml }).subscribe(response => { return response; });
要求ヘッダーを設定する場合を除き、ヘッダーを削除できます。
2019 Angular 7 HttpClient Note with Code
Get Angular Response as TextまたはXmlNOT as Json
いくつかの微妙な変更は、他の以前の回答が書き込まれた後、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>