Winkel 10 | HTTP-Beitrag | String-Array hängt FormData an
Ich muss eine Post-Anfrage an einen API-Endpunkt stellen, erhalte jedoch den Fehlerstatus 500.
name: "HttpErrorResponse"
ok: false
status: 500
statusText: "Internal Server Error"
Das ist mein Code:
var selectedIds = ["31"];
let sendData = new FormData();
sendData.append('auth', this.dataService.REG_AUTH);
sendData.append('identifier', identifier);
sendData.append('selected[]', selectedIds);
this.http.post<any>('APIENDPOINT', sendData).subscribe(data => {
console.log(data);
}, error => {
console.log(error);
});
Das Problem liegt in dieser Zeile: sendData.append('selected[]', selectedIds);Ich habe keine Ahnung, wie ein Array an FormData übergeben werden soll.
Dies ist ein funktionierendes Beispiel aus unserer Android-App. Ich muss diese Anfrage in Winkel- / Typoskript-Syntax konvertieren:
@JvmSuppressWildcards
@FormUrlEncoded
@POST("APIENDPOINT")
fun addData(
@Field("auth") auth: String,
@Field("identifier") identifier: String,
@Field("selected[]") selected: ArrayList<String>
): Call<ResponseBody>
Was ich bisher weiß:
Es scheint, dass Angular die Daten nicht serialisiert, daher habe ich einige fest codierte Korrekturen versucht, aber keine davon hat funktioniert:
sendData.append('selected%5B%5D', '%2231%22');
sendData.append('selected%5B%5D', '31');
sendData.append('selected%5B%5D', 31);
sendData.append('selected%5B%5D', '%5B%2231%22%5D');
sendData.append('selected%5B%5D', selectedIds);
sendData.append('selected%5B%5D', JSON.stringify(selectedIds));
Wenn ich selectedanstelle von verwende selected[], wird kein Fehler angezeigt, aber offensichtlich werden keine Daten aktualisiert. Daher bin ich mir ziemlich sicher, dass es sich um ein Serialisierungs- / Analyseproblem handelt.
Antworten
Aus dieser Antwort :
Die append () -Methode von FormData kann nur Objekte vom Typ String oder Blob akzeptieren. Wenn Sie das Array anhängen müssen, verwenden Sie die Methode JSON.stringify (), um Ihr Array in eine gültige JSON-Zeichenfolge zu konvertieren.
formData.append('selected[]', JSON.stringify(selectedIds));
Dies statusCode 500ist der interne Serverfehler und das serverseitige Problem. Überprüfen Sie daher besser, APIob Ihre Anfrage empfangen werden kann oder nicht.
FormData- append()Methode accept stringoder blobtype Sie können also JSON.stringify()method ( formData.append('selectedIds', JSON.stringify(selectedIds));) verwenden. Versuchen Sie Folgendes:
let selectedIds = ["31"];
let sendData = new FormData();
sendData.append('auth', this.dataService.REG_AUTH);
sendData.append('identifier', identifier);
sendData.append('selectedIds', JSON.stringify(selectedIds));
this.http.post<any>('APIENDPOINT', sendData).subscribe(data => {
console.log(data);
}, error => {
console.log(error);
});