我试图用params发送一个httpClient.get请求并在我的Spring Controller中使用它。我想发送搜索条件并根据该条件返回对象列表。
这是我的search.service.ts
timer.cancel()
在我的controller.java中
public getDentists(name, city, type, rating): Observable<Dentist[]>{
let params = new HttpParams();
params.set('name', name);
params.set('city', city);
params.set('type', type);
params.set('rating', rating);
return this.httpClient.get('dentists/', {params: params});
}
这是我得到的错误:
我的问题是我做错了什么,为什么我没有收到带有请求参数的参数?
答案 0 :(得分:3)
HttpParams是不可变的。所有变异运算符都返回一个新实例,所以你必须这样做
let params = new HttpParams()
.set('name', name)
.set('city', city)
.set('type', type)
.set('rating', rating);
或
let params = new HttpParams();
params = params.set('name', name);
params = params.set('city', city);
params = params.set('type', type);
params = params.set('rating', rating);
答案 1 :(得分:0)
将您的代码更改为:
let params = new HttpParams()
.set('name', name)
.set('city', city)
.set('type', type)
.set('rating', rating);
HttpParams是不可变的。
答案 2 :(得分:0)
尝试使用append()
方法(而不是add()
):
public getDentists(name, city, type, rating): Observable<Dentist[]>{
let params = new HttpParams();
params = params.append('name', name);
params = params.append('city', city);
params = params.append('type', type);
params = params.append('rating', rating);
return this.httpClient.get('dentists/', {params: params});
}
<强>更新强>
实际上append()
和set()
方法会产生完全相同的结果:
?name=NAME_VALUE&city-CITY_VALUE&type=TYPE_VALUE&rating=RATING_VALUE,
当我们想要将另一个值附加到现有密钥时,应该使用 append()
,例如:
?name=NAME1&name=NAME2_VALUE&.....
我们也可以使用传递给HttpParams
构造函数的HttpParamsOptions
对象:
const params = new HttpParams({
fromObject: {
name,
city,
type,
rating
}
});
return this.httpClient.get('dentists/', {params});