Angular 4 http带有多个参数到Spring请求映射
我试图用params发送一个httpClient.get请求,并在我的Spring控制器中使用它。我想发送搜索条件并根据该条件返回对象列表。Angular 4 http带有多个参数到Spring请求映射
这是我search.service.ts
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});
}
在我controller.java
@RequestMapping(value = "/dentists", method = RequestMethod.GET) public List<Dentist> search(@RequestParam("name") String name,
@RequestParam("city") String city,
@RequestParam("type") String type,
@RequestParam("rating") String rating) {
return dentistRepository.findDentistByName(name);
}
这是我得到的错误:
- 我也得到这个错误: 2017-12-03 01:07:10.138警告10108 --- [nio-8080-exec-1] .wsmsDefaultHandlerExceptionResolver:由Handler执行引起的已解决的异常:org.springframework.web.bind.MissingServletRequestParameterException:必需的String参数'名称'不存在
我的问题是我在做什么错,为什么我没有收到requestparam参数?
回答:
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);
回答:
改变你的代码:
let params = new HttpParams() .set('name', name)
.set('city', city)
.set('type', type)
.set('rating', rating);
的HttpParams是不可改变的。
回答:
尝试使用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});
}
UPDATE
实际上append()
和set()
方法会产生相同的结果:
?name=NAME_VALUE&city-CITY_VALUE&type=TYPE_VALUE&rating=RATING_VALUE,
应该append()
使用wh恩,我们希望其他值附加到现有的关键,这样的:
?name=NAME1&name=NAME2_VALUE&.....
我们也可以使用传递给HttpParams
构造HttpParamsOptions
对象:
const params = new HttpParams({ fromObject: {
name,
city,
type,
rating
}
});
return this.httpClient.get('dentists/', {params});
以上是 Angular 4 http带有多个参数到Spring请求映射 的全部内容, 来源链接: utcz.com/qa/258741.html