2013-12-20 6 views
9

Ich versuche, auf einen Rest-Endpunkt zuzugreifen, indem ich RestTemplate.getForObject() verwende, aber meine uri-Variablen werden nicht erweitert und als Parameter an die URL angehängt. Das ist, was ich bisher habe:RestTemplate uriVariables nicht erweitert

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

der Wert der endpointUrl Variable ist http://127.0.0.1/service/v4_1/rest.php und es ist exactely, wie es heißt, aber ich würde erwarten, dass http://127.0.0.1/service/v4_1/rest.php?method=login&input_type... genannt werden. Alle Hinweise sind willkommen.

Ich bin mit Frühling 3.1.4.RELEASE

Grüße.

+0

Bitte den Wert Ihrer endpointUrl –

Antwort

16

keine APPEND Es gibt einige Abfrage-String-Logik in RestTemplate es grundsätzlich variabel wie {foo} durch ihren Wert ersetzen:

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

wird:

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

wenn foo ist 2.

+0

Dank veröffentlichen, dies funktioniert, aber in der Dokumentation nach, die Option mit der uriParams-Karte sollte auch funktionieren. – user1145874

+2

es funktioniert, aber Sie müssen eine Variable in Ihrer URL haben (es ist eine Karte von Variablen) –

1

RC .'s Accepted Answer ist korrekt über die Params Map, die variable Marker in der URL benötigt, die in ("fo o "in" //www.sample.com?foo={foo} "wird durch den Schlüssel ersetzt, der von" foo "in Ihrer Params Map zugeordnet wurde.

Es ist technisch auch möglich, die params in die URL-String selbst mit wie zu beginnen, explizit zu codieren:

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