14

サーバー側に、データベースに登録されている特定の名前に関する情報を提供するメソッドがあります。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

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

4

2 に答える 2

50

rest テンプレートは、変数 "{name}" がそこにあることを期待しています。

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

  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);
于 2013-04-02T21:17:20.393 に答える