Gewusst wie: List oder String-array getForObject mit Feder RestTemplate
Ich entwickle einige restful services mit Spring. Ich habe Probleme mit dem übergeben/erste string-array oder großer string als Parameter an meine Dienst-controller. Meine code-Beispiele wie unten;
Controller:
@RequestMapping(value="/getLocationInformations/{pointList}", method=RequestMethod.GET)
@ResponseBody
public LocationInfoObject getLocationInformations(@PathVariable("pointList") String pointList)
{
//code block
}
Sample-point-Liste:
String pointList = "37.0433;35.2663,37.0431;35.2663,37.0429;35.2664,37.0428;35.2664,37.0426;35.2665,37.0424;35.2667,37.0422;35.2669,37.042;35.2671,37.0419;35.2673,37.0417;35.2674,37.0415;35.2674,37.0412;35.2672,37.0408;35.267,37.04;35.2667,37.0396;35.2665,37.0391;35.2663,37.0388;35.2662,37.0384;35.266,37.0381;35.2659,37.0379;35.2658,37.0377;35.2657,37.0404;35.2668,37.0377;35.2656,37.0378;35.2652,37.0378;35.2652,37.0381;35.2646,37.0382;35.264,37.0381;35.2635,37.038;35.263,37.0379;35.2627,37.0378;35.2626,37.0376;35.2626,37.0372;35.2627,37.0367;35.2628,37.0363;35.2628,37.036;35.2629,37.0357;35.2629,37.0356;35.2628,37.0356;35.2628,37.0355;35.2626";
Web-service-client-code:
Map<String, String> vars = new HashMap<String, String>();
vars.put("pointList", pointList);
String apiUrl = "http://api.website.com/service/getLocationInformations/{pointList}";
RestTemplate restTemplate = new RestTemplate();
LocationInfoObject result = restTemplate.getForObject(apiUrl, LocationInfoObject.class, vars);
Wenn ich die client-seitige Anwendung, es wirft ein HttpClientErrorException: 400 Bad Request
ich denke lange Standortinformationen string Ursachen für dieses problem. Also, wie kann ich dieses Problem lösen? Oder ist es möglich, die Buchung lange string-Wert als parameter in die web-service?
Thx allen
InformationsquelleAutor vtokmak | 2014-03-19
Du musst angemeldet sein, um einen Kommentar abzugeben.
Liste oder eine andere Art der Objekte kann die post mit RestTemplate ist postForObject Methode. Meine Lösung ist wie folgt:
controller:
Erstellen Sie ein request-Objekt für die Buchung zum service:
Erstellen Sie ein Antwort-Objekt, um Werte aus service:
Post-point-Liste mit request-Objekt und als Antwort bekommen-Objekt vom Dienst:
InformationsquelleAutor vtokmak
Erstens, Sie haben bestanden, eine map als Parameter, aber mit dem controller erwartet, dass diese wie eine path-variable. Alles, was Sie tun müssen ist, stellen die "pointlist" Wert " - Teil der URL ein (ohne die geschweiften Klammer Platzhalter). z.B.:-
Als Nächstes müssen Sie, um sicherzustellen, Sie haben die Botschaft-Wandler so eingestellt, dass Ihr LocationInfoObject ist umgewandelt in eine geeignete Darstellung (vorschlagen JSON) und unmarshallt die gleiche Weise.
Für den Rest Vorlage:
Für die server, die Sie gerade brauchen, um hinzuzufügen, Jackson zu den Klassenpfad (möchten Sie mehrere Zusicherungen, die Sie brauchen, um zu konfigurieren, jeweils eine manuell - Google wird dein Freund hier auch.
InformationsquelleAutor user1016765