각도 10 | Http 게시물 | string 형 배열 추가 FormData

Sep 15 2020

api 엔드 포인트에 게시 요청을해야하는데 오류 상태 500이 표시됩니다.

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

이것은 내 코드입니다.

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

문제는이 줄에 있습니다. sendData.append('selected[]', selectedIds);배열을 FormData에 전달하는 방법에 대한 단서가 없습니다.

이것은 우리 안드로이드 앱의 실제 예제입니다. 이 요청을 각도 / 타입 스크립트 구문으로 변환해야합니다.

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

내가 지금까지 알고있는 것 :

angular가 데이터를 직렬화하지 않는 것 같아서 하드 코딩 된 수정을 시도했지만 다음 중 어느 것도 작동하지 않았습니다.

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

내가 사용하는 경우 selected대신 selected[]내가 확신이 직렬화 / 구문 분석 문제입니다, 그래서 그때는 분명히 데이터가 업데이트되지 않는 오류를 얻을 수 없지만,.

답변

2 ForestG Sep 15 2020 at 12:46

에서 이 대답 :

FormData의 append () 메서드는 문자열 또는 blob 유형의 개체 만 허용 할 수 있습니다. 배열을 추가해야하는 경우 JSON.stringify () 메서드를 사용하여 배열을 유효한 JSON 문자열로 변환합니다.

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

는 statusCode 500내부 서버 오류이며, 서버 측의 문제입니다. 따라서 API귀하의 요청을받을 수 있는지 여부 를 확인하는 것이 좋습니다 .

FormData의 append()메서드는 accept string또는 blobtype이므로 JSON.stringify()메서드 ( formData.append('selectedIds', JSON.stringify(selectedIds));)를 사용할 수 있습니다 . 그래서 이것을 시도하십시오 :

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