Angular 4 http获得Spring Request Mapping的多个参数

时间:2017-12-02 23:06:25

标签: spring angular http

我试图用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});
  }

这是我得到的错误:

enter image description here

  • 我也收到此错误: 2017-12-03 01:07:10.138 WARN 10108 --- [nio-8080-exec-1] .wsmsDefaultHandlerExceptionResolver:由Handler执行导致的已解决异常:org.springframework.web.bind.MissingServletRequestParameterException:必需的字符串参数&# 39;名称&#39;不存在

我的问题是我做错了什么,为什么我没有收到带有请求参数的参数?

3 个答案:

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