15
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';
});

Hi I am using Angular HttpClient to make a http get request from a spring controller which returns a XML response.

The problem I have is the response is ALWAYS NULL even though I can see the xml response from the chrome developer network tab.

I thought it might be something to do with the request header, Angular defaults to JSON however I am unable to change the request header with the code above. Can someone please advice.

Thanks

2
  • You are not doing anything with the response? Commented Jul 24, 2017 at 8:57
  • 1
    I have figured this out. need to set the responseType to text. Cheers this.http.get(sldUrl, {observe: 'response', responseType: 'text', headers: headers}) Commented Jul 25, 2017 at 1:25

3 Answers 3

42

Set the responseType to text:

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

Allowed values for responseType:

  • arraybuffer
  • blob
  • json (default)
  • text

The responseType value determines how a successful response body will be parsed.

See Angular Docs:
HttpRequest # responseType
HttpClient # request()

Sign up to request clarification or add additional context in comments.

3 Comments

for Observable<string> it may also be a requirement to set observe: 'body' ... this.myHttpCliVar.get('pathToMyTargetUrl' , { observe: 'body', responseType: 'text'} ).subscribe(valAsStr => {this.localStrVar = valAsStr; }); notice that it is .get(...) not get<string>(...)
On angular 8 don't forget cast as object <Object>{ responseType: 'text' }
"If responseType is the default json, you can pass a type interface for the resulting object as a type parameter to the call.". See also Overload #3 of the get() method in docs: The return value of responseType: 'text' is Observable<string>.
9

2019 Angular 7 above HttpClient Note with Code

Get Angular Response as Text or Xml NOT as Json

Some subtle changes may have occurred in Angular 7 after the other previous answers were written. This is like a detailed comment with code to MA-Maddin's answer.

@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 Comment

Thanks for the answer. Passing { observe: 'body', responseType: 'text'} as options served the purpose. Its working for me
1

The issue here is the HttpHeaders are immutable in angular. So instead of setting the values, you should set when you create the object. Something like

const headers = new HttpHeaders({ 'Content-Type': 'text/xml' }).set('Accept', 'text/xml');

But you are setting only request headers. If you want your response to be text/xml.

this.http.get('getxmlurl', { headers: headers, responseType: text/xml }).subscribe(response => { return response; });

You can remove headers unless you want to set request headers.

1 Comment

responseType: text NOT text/xml

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.