2017-12-02 159 views
0

我試圖用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); 
} 

這是我得到的錯誤:

enter image description here

  • 我也得到這個錯誤: 2017-12-03 01:07:10.138警告10108 --- [nio-8080-exec-1] .wsmsDefaultHandlerExceptionResolver:由Handler執行引起的已解決的異常:org.springframework.web.bind.MissingServletRequestParameterException:必需的String參數'名稱'不存在

我的問題是我在做什麼錯,爲什麼我沒有收到requestparam參數?

回答

1

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); 
+0

@JJey NP,很高興我能幫助! – LLai

0

改變你的代碼:

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

的HttpParams是不可改變的。

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

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}); 
相關問題