angular 4 httpclient xml响应

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

设置responseTypetext:

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

允许的值responseType:

  • arraybuffer
  • blob
  • json (默认)
  • text

responseType值确定如何解析成功的响应主体.

请参阅Angular Docs:
HttpRequest
#responseType HttpClient#request()


Sql*_*fer 8

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)


Kar*_*han 1

这里的问题是 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)

除非您想设置请求标头,否则您可以删除标头。

  • 响应类型:文本而不是文本/xml (7认同)