2013-04-02 51 views
12

我在服務器端有一個方法,它提供了有關在我的數據庫中註冊的特定名稱的信息。我從我的Android應用程序訪問它。如何發送帶參數的getForObject請求Spring MVC

對服務器的請求正常完成。我想要做的是根據我想要得到的名稱傳遞參數到服務器。

這裏是我的服務器端方法:

@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 

是有可能像這樣向我的服務器發送參數?

回答

44

其餘的模板期待一個變量「{name}」在那裏,以供它替換。

我想你希望做的是建立與查詢參數的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); 
+0

謝謝!你能否給我一個我如何使用第一種方法的例子? –

+0

完美!像魅力一樣工作,謝謝! –

相關問題