Wie verwende ich RestTemplate, um ein Objekt als Parameter zu übergeben? Zum Beispiel, sagen, dass ich die folgenden Dienste mit Frühlings-Boot aufgestellt hatte:Spring RestTemplate - Übergabe von Objektparametern in GET
@RequestMapping(value = "/get1", method = RequestMethod.GET)
public ResponseEntity<String> get1(@RequestParam(value = "parm") String parm) {
String response = "You entered " + parm;
return new ResponseEntity<String>(response, HttpStatus.OK);
}
@RequestMapping(value = "/get2", method = RequestMethod.GET)
public ResponseEntity<String> get2(@RequestParam(value = "parm") MyObj parm) {
String response = "You entered " + parm.getValue();
return new ResponseEntity<String>(response, HttpStatus.OK);
}
Wenn ein Client aufrufen wollte, den ersten Dienst könnten sie die folgende verwenden:
//This works fine
RestTemplate restTemplate = new RestTemplate();
String response = restTemplate.getForObject("http://localhost:8080/get1?parm={parm}", String.class, "Test input 1");
Aber wenn ein Client wollten den zweiten Dienst rufen sie erhalten einen 500-Fehler mit dem folgenden:
//This doesn't work
MyObj myObj = new MyObj("Test input 2");
RestTemplate restTemplate = new RestTemplate();
String response = restTemplate.getForObject("http://localhost:8080/get2?parm={parm}", String.class, myObj);
die MyObj Klasse sieht wie folgt aus:
Ich nehme an, dass das Problem ist, dass das myObj nicht ordnungsgemäß als Parameter eingerichtet wird. Wie gehe ich dabei vor?
Vielen Dank im Voraus.
Funktioniert perfekt. Vielen Dank! –
Große Antwort! Tatsächlich, viele popele (wenn nicht alle :)) Marshal/Unmarsch-Objekte immer als JSON. Ich frage mich immer, warum nicht eine Schnittstelle sowohl auf Client- als auch auf Serverseite implementiert wird? Solange Sie Ihren Dienst für die Welt nicht öffnen, glaube ich, es macht es perfekt ... – hublo
@hublo Das ist, was ich oft bei Projekten tun, könnte der REST-Client auf der Verbraucherseite die gleiche Schnittstelle wie der REST-Dienst implementieren auf der anderen Seite. – g00glen00b