Как передать закодированный («application /x-www-form-urlencoded») объект с массивом в строке запроса в HttpClient?

#angularjs #encoding #urlencode #x-www-form-urlencoded

#angularjs #кодирование #urlencode #x-www-form-urlencoded

Вопрос:

Я пытаюсь закодировать («application / x-www-form-urlencoded») объект в Angular, используя HttpParameterCodec. Этот объект имеет поле в качестве объекта, который, в свою очередь, имеет массив строк. структура объекта, как указано ниже.

 export class SearchRequest {id: string = undefined;partnerIds: PartnerIds = undefined;}


export class PartnerIds { partnerId: string[] = undefined;}
  

Теперь, когда я пытаюсь закодировать этот объект с помощью служебного кода (который отлично работает с обычным объектом), упомянутым ниже, он находится в неправильном формате из-за списка строк в нем.

 generateQueryParams(searchRequest) {
    let httpParams: HttpParams = new HttpParams({encoder: new CustomEncoderComponent()});
    Object.keys(searchRequest).forEach(key => {
      httpParams = httpParams.append(key, searchRequest[key]);
    });

    return httpParams;
}
  

Я попытался использовать приведенный ниже формат параметров запроса, но это не сработало.

 1.   id=123amp;partnerIds=XYZamp;partnerIds=ABC
2.   id=123amp;partnerId[]=XYZamp;partnerId[]=ABC
3.   id=123amp;partnerId=XYZamp;partnerId=ABC
  

Пожалуйста, подскажите, как передать этот объект (SearchRequest) в строке запроса в HttpClient?

Комментарии:

1. Не существует стандарта для кодирования чего-либо, кроме простых пар ключ-значение, в кодировку URL. Различные языки или фреймворки имеют свой собственный путь. foo=baramp;foo=baz , foo[]=baramp;foo[]=baz , foo.0=baramp;foo.1=baz … Это в основном зависит от вас и от того, как ваш сервер может / будет с этим справляться.

2. Спасибо deceze за ваш ответ. Проблема здесь с любым из них заключается в том, что я получаю нулевые значения для поля partnerIds в конечной точке Java Rest.