web-dev-qa-db-fra.com

Comment envoyer une demande getForObject avec les paramètres Spring MVC

J'ai une méthode côté serveur qui me donne des informations sur un nom spécifique enregistré dans ma base de données. J'y accède depuis mon application Android. 

La demande au serveur est faite normalement. Ce que j'essaie de faire est de passer un paramètre au serveur en fonction du nom que je veux obtenir 

Voici ma méthode côté serveur:

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

    ........
}

Voici la demande Android à ce sujet:

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

Du côté du serveur, je ne reçois que:

Requested name: null

Est-il possible d'envoyer des paramètres à mon serveur comme ceci?

12
Felipe Mosso

Le modèle restant attend une variable "{nom}" à remplacer.

Ce que je pense que vous cherchez à faire est de créer une URL avec des paramètres de requête. Vous avez l'une des deux options suivantes:

  1. Utilisez un UriComponentsBuilder et ajoutez les paramètres par celui-ci
  2. String url = BASE_URL + "/Android/played.json?name={name}"

L’option 1 est cependant beaucoup plus souple. L’option 2 est plus directe si vous avez juste besoin de le faire.

Exemple à la demande

// 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);
46
Dave G

Changement 

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

à 

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

parce que la carte contient des variables pour l'URL seulement!

0
Peter Rader