Printemps RestTemplate: l'envoi de tableau / liste de Chaîne de caractères dans la requête GET
Je suis en train d'envoyer un tableau /liste de Cordes à mon REPOS serveur par le biais de Printemps RestTemplate.
C'est sur mon android secondaires:
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());
La builtUrl est: https://10.0.3.2:5000/getsubscribedarticles?articleids=%5B563e5aeb0eab252dd4368ab7,%20563f2dbd9bb0152bb0ea058e%5D
Sur le côté serveur:
@RequestMapping(value = "/getsubscribedarticles", method = RequestMethod.GET)
public List<Posts> getSubscribedPostFeed(@RequestParam("articleids") List<String> articleids){
for (String articleid : articleids {
logger.info(" articleid : " + articleid);
}
}
Les logs du serveur:
.13:11:35.370 [http-nio-8443-exec-5] pour INFO c.f.s.j'.ServiceGatewayImpl
- articleid : [563e5aeb0eab252dd4368ab7.13:11:35.370 [http-nio-8443-exec-5] pour INFO c.f.s.j'.ServiceGatewayImpl
- articleid : 563f2dbd9bb0152bb0ea058e]
Que je peux voir est erronée, car la liste ne devrait pas avoir un " ["sur le premier élément et un"] " sur le dernier élément.
J'ai lu ce fil Comment passer de la Liste ou de tableau de Chaîne de getForObject avec le Printemps RestTemplate mais il ne fait pas de répondre à la question.
La réponse sélectionnée dans les questions de POST, mais je veux faire une requête GET , aussi il nécessite un objet supplémentaire de travail pour contenir la liste et je préfère ne pas créer des objets en plus si je peux le faire avec le Printemps RestTemplate nativement.
OriginalL'auteur Simon | 2015-11-08
Vous devez vous connecter pour publier un commentaire.
À l'aide de Java 8, cela a fonctionné pour moi :
Il forme l'URL de la forme:
OriginalL'auteur userab
Je m'attends à ce que le bon fonctionnement de l'url est quelque chose comme:
Après un rapide coup d'oeil au code de
public UriComponentsBuilder queryParam(String name, Object... values)
, j'aimerais le résoudre en utilisantUriComponentsBuilder
de cette façon:Il est important que le deuxième paramètre est un
array
mais pas un Objet/Collection!OriginalL'auteur Ralph
Vous avez tout fait correct. Vous avez juste besoin de l'appeler sans le
[]
.Il suffit d'invoquer avec
.../getsubscribedarticles/articleids=foo,bar,42
J'ai testé avec Spring Boot 1.2.6 et il fonctionne comme ceci.
Je crois fermement que c'est faux.
articleids
est une partie de la partie requête de l'url, et donc@RequestParam
doit été utilisé, mais pas @PathVariable - voir stackoverflow.com/questions/13715811/... - donc, afin d'utiliser@PathVariable
il aurait été nécessaire aussi d'en modifier l'url de sorte que le paramètre de requête devenir une partie du chemin d'accèsVous êtes de droite. J'ai mis à jour la réponse et enlevé la partie en parler PathVariables.
OriginalL'auteur d0x
Grâce à dOx pour sa suggestion, j'ai réussi à résoudre ce avec la PathVariable - j'ai mis la liste dans mon url pour android:
Pour mon repos serveur:
OriginalL'auteur Simon