web-dev-qa-db-ja.com

Spring MVCパラメータを指定してgetForObjectリクエストを送信する方法

サーバー側にデータベースに登録されている特定の名前に関する情報を提供するメソッドがあります。 Androidアプリケーションからアクセスしています。

サーバーへのリクエストは正常に行われます。私がやろうとしているのは、取得したい名前に応じてサーバーにパラメーターを渡すことです。

これが私のサーバーサイドメソッドです:

@RequestMapping("/Android/played")
public ModelAndView getName(String name) {
    System.out.println("Requested name: " + name);

    ........
}

Androidへのリクエストは次のとおりです。

private Name getName() {
    RestTemplate restTemplate = new RestTemplate();
    // Add the String message converter
    restTemplate.getMessageConverters().add(
        new MappingJacksonHttpMessageConverter());
    restTemplate.setRequestFactory(
        new HttpComponentsClientHttpRequestFactory());

    String url = BASE_URL + "/Android/played.json";
    String nome = "Testing";

    Map<String, String> params = new HashMap<String, String>();
    params.put("name", nome);

    return restTemplate.getForObject(url, Name.class, params);
}

サーバー側では、私だけを得ています:

Requested name: null

このようにサーバーにパラメーターを送信することは可能ですか?

13
Felipe Mosso

残りのテンプレートは、変数「{name}」がそこに置き換わることを期待しています。

あなたが探しているのは、クエリパラメータを使用してURLを作成することです。この場合、2つのオプションのいずれかを使用できます。

  1. UriComponentsBuilderを使用し、それによってパラメータを追加します
  2. 文字列url = BASE_URL + "/Android/played.json?name={name}"

オプション1の方がはるかに柔軟です。オプション2は、これを実行する必要がある場合のみ、より直接的です。

要求に応じた例

// Assuming BASE_URL is just a Host url like http://www.somehost.com/
URI targetUrl= UriComponentsBuilder.fromUriString(BASE_URL)  // Build the base link
    .path("/Android/played.json")                            // Add path
    .queryParam("name", nome)                                // Add one or more query params
    .build()                                                 // Build the URL
    .encode()                                                // Encode any URI items that need to be encoded
    .toUri();                                                // Convert to URI

return restTemplate.getForObject(targetUrl, Name.class);
48
Dave G

変化する

String url = BASE_URL + "/Android/played.json";

String url = BASE_URL + "/Android/played.json?name={name}";

マップにはURLの変数のみが含まれているためです!

0
Peter Rader