2017-12-02 6 views
0

httpClient.getリクエストをparamsとともに送信し、Spring Controllerでそれを消費しようとしています。私は検索基準を送信し、その基準に従ってオブジェクトのリストを返すことを望む。角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 WARN 10108 --- [nio-8080-exec-1] .wsmsDefaultHandlerExceptionResolver:ハンドラ実行による解決済みの例外:org.springframework.web.bind.MissingServletRequestParameterException:必須文字列パラメータ '名前が存在しません。

質問:私は間違っているのですが、どうして私はリクエストパラームでパラメータを受け取っていませんか?

答えて

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、:

?name=NAME1&name=NAME2_VALUE&..... 

我々はまた、HttpParamsコンストラクタに渡さHttpParamsOptionsオブジェクトを使用することができます! – LLai

0

変更にあなたのコードを実行する必要があります。

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

HttpParamsは不変です。

?name=NAME_VALUE&city-CITY_VALUE&type=TYPE_VALUE&rating=RATING_VALUE, 

append()べきである:実際にappend()set()方法はまったく同じ結果になります

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

:(代わりにadd()の)append()メソッドを使用する

0

試してみますwhを使う我々は、既存のキーに別の値を追加したいエン、のようなもの:私は助けることができ嬉しい

const params = new HttpParams({ 
    fromObject: { 
    name, 
    city, 
    type, 
    rating 
    } 
}); 
return this.httpClient.get('dentists/', {params}); 
関連する問題