2017-12-30 10 views
1

Ich habe einige Schwierigkeiten herauszufinden, warum ich eine Null-Antwort in eckigen, wenn ich versuche, einen Beitrag zu einem httpservlet (Java) in einer WAS-Umgebung zu tun.Httpclient Antwort null beim Aufruf von Java Servlet

Was ich versuche zu tun ist, rufen Sie eine API zum Login. Ich möchte die Antwort-Header erhalten, aber ich bekomme eine Null-Antwort, was es unmöglich macht, etwas mit der Antwort zu tun.

Ich habe versucht, meine Parameter als Formulardaten mit der Content-Type-Anwendung/x-www-form-urlencoded; charset = UTF-8 und als Abfrageparameter ohne definierten Inhaltstyp zu senden.

In beiden Situationen kann ich mich anmelden und bekomme eine 200 Antwort mit Header-Informationen in meinem Browser.

das ist mein Aufruf

return this.http.post(this.contextRoot.getHost() + 'osa-kantoor-ws/api/auth/login?' + param1 + "&" + param2,null, this.httpOptions).map((res : Response) => { 
 
     localStorage.setItem('currentUser', JSON.stringify(username)); 
 
     return res; 
 
    });

jetzt Mein Kopf info ist

httpOptions = { 
 
    headers: new HttpHeaders({'Content-Type' : 'application/json', 'Accept': 'application/text'}), 
 
    params: {} 
 
    };

die localstorage Artikel gesetzt wird, aber die Wieder sponseinformation ist null.

das ist mein

login() { 
 
    this.loginService.login(this.loginForm.value.userName,this.loginForm.value.password) 
 
     .subscribe(
 
     data => { 
 
      console.log(data); 
 
      this.router.navigate([this.returnUrl]); 
 
     }, 
 
     error => { 
 
      console.log(error); 
 
      this.loginfail = true; 
 
     }); 
 
    }

abonnieren Wenn im den Browser Info über meine Antwort Header-Kontrolle bekomme ich folgende Info

enter image description here

kann mir jemand sagen, was ich vermisse?

unten ist die ursprüngliche Methode

login(username: string, password: string) { 
 
    let param1: string = encodeURIComponent('userName') + '=' + encodeURIComponent(username); 
 
    let param2: string = encodeURIComponent('password') + '=' + encodeURIComponent(password); 
 
    let formParams: string = param1 + '&' + param2; 
 
    return this.http.post(this.contextRoot.getHost() + 'osa-kantoor-ws/api/auth/login', formParams, this.httpOptions).map(response=> { 
 
     localStorage.setItem('currentUser', JSON.stringify(username)); 
 
     console.log(response); 
 
     return response; 
 
    }); 
 
    }

+1

Was ist der Server wieder als Antworttext senden? Was erwartest du zu passieren? Und warum senden Sie die Anmeldeinformationen als Teil der URL, anstatt sie im Hauptteil zu senden? Sie möchten wirklich nicht, dass die Kennwörter in den Serverprotokollen angezeigt werden. –

+0

Ich benutzte dies als einen anderen Ansatz, um zu sehen, ob sich etwas ändern wird, wenn ich die Parameter als URL Params sende, ist der ursprüngliche Ansatz, es als Formulardaten zu senden, die natürlich im Körper ist. Der Antworttext ist leer, weil das Servlet keine anderen Informationen als einen Status 200 mit Header-Informationen (wie dem Cookie) liefert. –

+0

Ich nehme an, Sie möchten die Antwort beobachten? https://angular.io/guide/http#reading-the-full-response – Alex

Antwort

1

danke AJT_82,

Zugabe beachten: 'Antwort' auf die Konfiguration der Lösung ist.

Antwort ist jetzt, was ich erwarte. Die Standardantwort ist zu beobachten: "Körper" anscheinend.

Meine HTTP Config ist jetzt

httpOptions = { 
 
    headers: new HttpHeaders({'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8','Accept': 'application/xml'}), 
 
    observe: 'response' 
 
    };

und meine Antwort ist jetzt

enter image description here

Verwandte Themen