2013-04-02 16 views
12

Ho un metodo sul lato server che mi fornisce informazioni su un nome specifico registrato nel mio database. Sto accedendo dalla mia applicazione Android.Come inviare una richiesta getForObject con parametri Spring MVC

La richiesta al server viene eseguita normalmente. Quello che sto cercando di fare è passare il parametro al server a seconda del nome che voglio ottenere.

Ecco il mio metodo lato server:

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

    ........ 
} 

Ecco la richiesta Android ad esso:

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

Nel lato server, sto ottenendo soltanto:

Requested name: null 

Is è possibile inviare parametri al mio server in questo modo?

risposta

44

Il modello di resto si aspetta che una variabile "{nome}" sia presente per sostituirla.

Quello che penso che stai cercando di fare è costruire un URL con parametri di query si dispone di una delle due opzioni:

  1. Utilizzare un UriComponentsBuilder e aggiungere i parametri che url
  2. String = BASE_URL + "/android/played.json?name={name}"

L'opzione 1 è molto più flessibile. L'opzione 2 è più diretta se hai solo bisogno di fare questo.

Esempio come richiesto

// 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

Grazie !! Potresti darmi un esempio di come posso usare il primo approccio? –

+0

Perfetto !!! Funziona come un fascino, grazie! –

Problemi correlati