当前位置: 首页 > 知识库问答 >
问题:

Angular 4超文本传输协议获得多个参数到Spring请求映射

罗业
2023-03-14

我正在尝试发送一个httpClient。使用params获取请求并在我的Spring控制器中使用它。我想发送搜索条件并根据该条件返回对象列表。

这是我的搜索。服务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});
  }

在我的控制器里。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]。w、 s.m.s.DefaultHandlerExceptionResolver:已解决由处理程序执行引起的异常:org。springframework。网状物绑定MissingServletRequestParameterException:所需的字符串参数“name”不存在

我的问题是我做错了什么,为什么我没有通过requestparam接收参数?

共有3个答案

那正初
2023-03-14

尝试使用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构造函数的HttpParams对象:

const params = new HttpParams({
  fromObject: {
    name,
    city,
    type,
    rating
  }
});
return this.httpClient.get('dentists/', {params});
毛越
2023-03-14

将代码更改为:

let params = new HttpParams()
    .set('name', name)
    .set('city', city)
    .set('type', type)
    .set('rating', rating);

HttpParams是不可变的。

卜季萌
2023-03-14

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);
 类似资料:
  • 我正在使用GWT和Spring controller来管理http流量。有些请求可能需要很长时间,但我希望在超过给定时间时终止请求。 我如何配置超时Spring。我也使用Apache Tomcat 7.0。我试图在tomcat上inrease最大线程,但有一段时间tomcat工作缓慢,因为请求线程不会死。

  • 我有以下伪代码 我想要的是,我循环遍历一个对象数组,每个对象都获得相关的用户和产品,然后订阅用户和产品。我怎么能那样做?

  • 我想知道你对这个概念的看法/意见。如果有替代方案?这是否可行/有益? 据我所知,对于每个http请求,服务器都会执行一些操作并返回http响应。 现在考虑任何场景,我们希望对服务器上运行的进程有更多的控制。 情景1:http请求发送- 在这里,资源被浪费了。 情况2:http请求发送- 在这里,客户端不知道服务器中运行的进程的状态。客户端必须等待,直到它获得超文本传输协议响应。 我的想法是:在初始

  • 我使用Laravel 8。用户点击一个包含id的链接#()我的应用程序从浏览器收到一个$请求,并通过我的问题是如何将id#输入php变量?

  • 我有专有的基于http的API要从JMeter测试。不幸的是,API的一些endpoint希望http DELETE方法带有请求体(我知道它的API设计有问题,使用DELETE with request body,但我无法更改该API,需要对其进行测试)。 如何从JMeter测试它?似乎标准的HttpRequest采样器在没有任何警告的情况下默默忽略了我的身体有效载荷。(当我在《邮递员》中尝试它时

  • 我用Go编写了一个简单的服务器: 以及一个用Python编写的用于测试的简单客户端。以下是代码: 每次客户端访问服务器时,服务器都会产生这个错误: 我知道如何在Go中处理JSON Post请求 Python版本==3.4 Go版本==1.7 先谢谢你。