web-dev-qa-db-fra.com

UriVariables RestTemplate non développées

J'essaie d'accéder à un noeud final de repos à l'aide de springs RestTemplate.getForObject (), mais mes variables uri ne sont pas développées et attachées en tant que paramètres à l'URL. C'est ce que j'ai eu jusqu'à présent:

Map<String, String> uriParams = new HashMap<String, String>();
uriParams.put("method", "login");
uriParams.put("input_type", DATA_TYPE);
uriParams.put("response_type", DATA_TYPE);
uriParams.put("rest_data", rest_data.toString());
String responseString = template.getForObject(endpointUrl, String.class, uriParams);

la valeur de la variable endpointUrl est http://127.0.0.1/service/v4_1/rest.php et son nom est exact, mais je m'attendrais à ce que http://127.0.0.1/service/v4_1/rest.php?method=login&input_type... soit appelé. Tous les indices sont appréciés.

J'utilise Spring 3.1.4.LELEASE

Cordialement.

16
user1145874

Il n’existe pas de logique de chaîne de requête dans RestTemplate elle remplace la variable telle que {foo} par leur valeur:

http://www.sample.com?foo={foo}

devient:

http://www.sample.com?foo=2

si foo est 2.

30
user180100

La réponse actuellement marquée de l'utilisateur 18080 est techniquement correcte mais pas très explicite. Voici une réponse plus explicite, pour aider ceux qui viennent derrière moi, car lorsque j'ai lu la réponse pour la première fois à la réponse de zhe, cela n'avait aucun sens pour moi.

String url = "http://www.sample.com?foo={fooValue}";

Map<String, String> uriVariables = new HashMap();
uriVariables.put("fooValue", 2);

// "http://www.sample.com?foo=2"
restTemplate.getForObject(url, Object.class, uriVariables);
4
Bane

La réponse acceptée de RC est correcte à propos de la mappe des paramètres nécessitant des marqueurs de variable dans l'URL. foo "dans votre carte params).

Il est également techniquement possible de coder explicitement les paramètres dans la chaîne d'URL elle-même, pour commencer comme ceci:

endpointUrl = endpointUrl + "?method=login&input_type=" + DATA_TYPE + "&rest_data=" + rest_data.toString();
0
cellepo