私は自分自身のインターセプタを作成し、別のライブラリでクエリ文字列を生成することでこれを解決しました。以下を参照してください:
は、このライブラリをインストールします。
$ npm i query-string --save
このインターセプタを追加します。
import {
HttpEvent,
HttpHandler,
HttpInterceptor,
HttpParams,
HttpRequest,
} from '@angular/common/http';
import { Observable } from 'rxjs';
import * as querystring from 'query-string';
@Injectable()
export class QueryParamInterceptor implements HttpInterceptor {
constructor() {}
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
if (!request.params.keys().length || request.method !== 'GET') {
return next.handle(request);
}
let { params } = request;
let queryParams = this.createQueryParams(params);
let queryString = querystring.stringify(queryParams, { arrayFormat: 'bracket' });
let urlWithParams = request.urlWithParams.replace(request.params.toString(), queryString);
request = request.clone({
url: urlWithParams,
params: new HttpParams(),
});
return next.handle(request);
}
private createQueryParams(params: HttpParams): { [key: string]: string } {
let queryParams = {};
for (let key of params.keys()) {
let values = params.getAll(key);
if (!values) {
continue;
}
if (values.length === 1) {
queryParams[key] = values[0];
continue;
}
queryParams[key] = values;
}
return queryParams;
}
}