首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >具有多个params到Spring请求映射的角4 http get

具有多个params到Spring请求映射的角4 http get
EN

Stack Overflow用户
提问于 2017-12-02 23:06:24
回答 3查看 9.5K关注 0票数 3

我试图用params发送一个httpClient.get请求,并在我的Spring中使用它。我想发送搜索条件,并根据该条件返回对象列表。

这是我的search.service.ts

代码语言:javascript
运行
复制
 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里

代码语言:javascript
运行
复制
@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 .w.s.m.s.DefaultHandlerExceptionResolver :已解决的由Handler执行引起的异常:不存在org.springframework.web.bind.MissingServletRequestParameterException:必需的字符串参数'name‘。

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-12-02 23:16:40

HttpParams是不变的。所有的变异运算符都返回一个新实例,所以您必须这样做。

代码语言:javascript
运行
复制
let params = new HttpParams()
    .set('name', name)
    .set('city', city)
    .set('type', type)
    .set('rating', rating);

代码语言:javascript
运行
复制
let params = new HttpParams();
params = params.set('name', name);
params = params.set('city', city);
params = params.set('type', type);
params = params.set('rating', rating);
票数 3
EN

Stack Overflow用户

发布于 2017-12-02 23:17:09

将代码更改为:

代码语言:javascript
运行
复制
let params = new HttpParams()
    .set('name', name)
    .set('city', city)
    .set('type', type)
    .set('rating', rating);

HttpParams是不变的。

票数 0
EN

Stack Overflow用户

发布于 2017-12-02 23:23:20

尝试使用append()方法(而不是add()):

代码语言:javascript
运行
复制
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()方法将产生完全相同的结果:

代码语言:javascript
运行
复制
?name=NAME_VALUE&city-CITY_VALUE&type=TYPE_VALUE&rating=RATING_VALUE,

当我们想将另一个值附加到现有键时,应该使用append(),如下所示:

代码语言:javascript
运行
复制
?name=NAME1&name=NAME2_VALUE&.....

我们还可以使用传递给HttpParamsOptions构造函数的HttpParams对象:

代码语言:javascript
运行
复制
const params = new HttpParams({
  fromObject: {
    name,
    city,
    type,
    rating
  }
});
return this.httpClient.get('dentists/', {params});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47613568

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档