Sudut 10 | Http posting | Larik string menambahkan FormData

Sep 15 2020

Saya harus membuat permintaan posting ke titik akhir api, tetapi saya mendapatkan status kesalahan 500.

name: "HttpErrorResponse"
ok: false
status: 500
statusText: "Internal Server Error"

Ini kode saya:

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

Masalahnya ada di baris ini: sendData.append('selected[]', selectedIds);Saya tidak tahu cara meneruskan array ke FormData.

Ini adalah contoh yang berfungsi dari aplikasi android kami. Saya perlu mengubah permintaan ini dalam sintaks angular / ketikan:

@JvmSuppressWildcards
@FormUrlEncoded
@POST("APIENDPOINT")
fun addData(
    @Field("auth") auth: String,
    @Field("identifier") identifier: String,
    @Field("selected[]") selected: ArrayList<String>
): Call<ResponseBody>

Yang saya tahu sejauh ini:

Tampaknya angular tidak membuat serialisasi data, jadi saya mencoba beberapa perbaikan hardcode, tetapi tidak ada yang berhasil:

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));

Jika saya menggunakan selectedalih-alih selected[], maka saya tidak mendapatkan kesalahan, tetapi jelas tidak ada data yang diperbarui, jadi saya cukup yakin ini adalah masalah serialisasi / parsing.

Jawaban

2 ForestG Sep 15 2020 at 12:46

Dari jawaban ini :

Metode append () FormData hanya dapat menerima objek dengan tipe string atau blob. Jika Anda perlu menambahkan larik, gunakan metode JSON.stringify () untuk mengonversi larik Anda menjadi string JSON yang valid.

formData.append('selected[]', JSON.stringify(selectedIds));
1 ng-hobby Sep 15 2020 at 12:53

Ini statusCode 500adalah Kesalahan Server Internal, dan ini adalah masalah sisi server. Jadi, lebih baik untuk memeriksa APIapakah itu dapat menerima permintaan Anda atau tidak.

append()Metode FormData menerima stringatau blobmengetik Jadi Anda bisa menggunakan JSON.stringify()method ( formData.append('selectedIds', JSON.stringify(selectedIds));). Jadi coba ini:

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