web-dev-qa-db-ja.com

angular 4 httpclient xml response

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ですが、上記のコードでリクエストヘッダーを変更することはできません。誰かにアドバイスしてください。

ありがとう

8
user2106630

responseTypetextに設定します。

this.http.get('getXmlUrl', { responseType: 'text' }).subscribe(response => {
  console.log(response);
});

responseTypeに許可される値:

  • arraybuffer
  • blob
  • json(デフォルト)
  • text

ResponseType値は、成功した応答本文の解析方法を決定します。

Angular Docs:
HttpRequest#responseType
HttpClient#request()

20

ここでの問題は、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; });

要求ヘッダーを設定する場合を除き、ヘッダーを削除できます。

1

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>
1
Sql Surfer