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

回到顶部