Frühjahr RestTemplate: senden array / Liste von String in GET-Anfrage
Ich versuche zu senden ein array /Liste von String auf meinem REST-server durch eine Feder RestTemplate.
Dies ist auf meinem android-Seite:
private List<String> articleids = new ArrayList<>();
articleids.add("563e5aeb0eab252dd4368ab7");
articleids.add("563f2dbd9bb0152bb0ea058e");
final String url = "https://10.0.3.2:5000/getsubscribedarticles";
UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(url)
.queryParam("articleids", articleids);
java.net.URI builtUrl = builder.build().encode().toUri();
Log.e("builtUrl", builtUrl.toString());
Den builtUrl ist: https://10.0.3.2:5000/getsubscribedarticles?articleids=%5B563e5aeb0eab252dd4368ab7,%20563f2dbd9bb0152bb0ea058e%5D
Auf der server-Seite:
@RequestMapping(value = "/getsubscribedarticles", method = RequestMethod.GET)
public List<Posts> getSubscribedPostFeed(@RequestParam("articleids") List<String> articleids){
for (String articleid : articleids {
logger.info(" articleid : " + articleid);
}
}
Den server-logs:
.13:11:35.370 [http-nio-8443-exec-5] INFO c.f.s.ich.ServiceGatewayImpl
- artikelid : [563e5aeb0eab252dd4368ab7.13:11:35.370 [http-nio-8443-exec-5] INFO c.f.s.ich.ServiceGatewayImpl
- artikelid : 563f2dbd9bb0152bb0ea058e]
Was ich sehen kann ist falsch, da die Liste sollte nicht haben eine '[' auf den ersten Artikel und ein ']' auf das Letzte Element.
Habe ich diesen thread gelesen Gewusst wie: List oder String-array getForObject mit Feder RestTemplate aber es ist nicht wirklich die Frage beantworten.
Den ausgewählten beantworten Sie Fragen aus einer POST-Anfrage, aber ich möchte einen GET-request , auch er benötigt eine zusätzliche Objekt zu arbeiten, um halten Sie die Liste, und ich würde bevorzugen, um nicht zusätzliche Objekte, wenn ich es tun kann, mit Feder RestTemplate nativ.
InformationsquelleAutor Simon | 2015-11-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwendung von Java 8, das funktionierte für mich :
Bildet es die URL wie:
InformationsquelleAutor userab
Ich würde erwarten, dass die korrekte Arbeitsweise-url ist sowas wie:
Nach einem kurzen Blick auf den code der
public UriComponentsBuilder queryParam(String name, Object... values)
würde ich es lösen, indemUriComponentsBuilder
diese Weise:Ist es wichtig, dass der zweite parameter ist ein
array
aber nicht ein Objekt/Sammlung!InformationsquelleAutor Ralph
Du alles richtig gemacht hast. Sie brauchen nur zu rufen, ohne das
[]
.Nur aufrufen, mit
.../getsubscribedarticles/articleids=foo,bar,42
Getestet habe ich dies mit Spring-Boot-1.2.6 und es funktioniert wie folgt.
Ich bin der festen überzeugung, dass das falsch ist.
articleids
ist Teil der query-Teil der url, und deshalb@RequestParam
sollte verwendet worden, aber nicht @PathVariable - siehe stackoverflow.com/questions/13715811/... - so um@PathVariable
wäre es erforderlich auch modifiziert die url, so dass die query-parameter werden Sie ein Teil des PfadesDu hast Recht. Ich aktualisierte die Antwort, und entfernt den Teil reden PathVariables.
InformationsquelleAutor d0x
Dank dOx für seinen Vorschlag - habe ich es geschafft, dies zu lösen, mit der PathVariable - ich habe die Liste in meine url für android:
Für meine rest-server:
InformationsquelleAutor Simon