Passer un tableau ou une liste à @Pathvariable - Spring/Java
-
09-12-2019 - |
Question
Je fais un simple « get » dans JBoss/Spring.Je veux que le client me transmette un tableau d'entiers dans l'URL.Comment puis-je configurer cela sur le serveur ?Et montrez-vous si le client doit envoyer le message ?
C'est ce que j'ai en ce moment.
@RequestMapping(value="/test/{firstNameIds}", method=RequestMethod.GET)
@ResponseBody
public String test(@PathVariable List<Integer> firstNameIds)
{
//What do I do??
return "Dummy";
}
Sur le client, j'aimerais transmettre quelque chose comme
http://localhost:8080/public/test/[1,3,4,50]
Lorsque j'ai fait cela, j'obtiens une erreur :
java.lang.IllegalStateException :Impossible de trouver @PathVariable [firstNameIds] dans @RequestMapping
La solution
GET http://localhost:8080/public/test/1,2,3,4
@RequestMapping(value="/test/{firstNameIds}", method=RequestMethod.GET)
@ResponseBody
public String test(@PathVariable String[] firstNameIds)
{
// firstNameIds: [1,2,3,4]
return "Dummy";
}
(Testé avec le ressort MVC 4.0.1)
Autres conseils
Vous devriez faire quelque chose comme ceci :
Appel:
GET http://localhost:8080/public/test/1,2,3,4
Votre contrôleur :
@RequestMapping(value="/test/{firstNameIds}", method=RequestMethod.GET)
@ResponseBody
public String test(@PathVariable List<Integer> firstNameIds) {
//Example: pring your params
for(Integer param : firstNameIds) {
System.out.println("id: " + param);
}
return "Dummy";
}
Si vous voulez utiliser des crochets - []
DELETE http://localhost:8080/public/test/[1,2,3,4]
@RequestMapping(value="/test/[{firstNameIds}]", method=RequestMethod.DELETE)
@ResponseBody
public String test(@PathVariable String[] firstNameIds)
{
// firstNameIds: [1,2,3,4]
return "Dummy";
}
(Testé avec le ressort MVC 4.1.1)
pourrait faire @pathvariable String IDS, puis analyser la chaîne.
Alors quelque chose comme:
@RequestMapping(value="/test/{firstNameIds}", method=RequestMethod.GET)
@ResponseBody
public String test(@PathVariable String firstNameIds)
{
String[] ids = firstNameIds.split(",");
return "Dummy";
}
vous passeriez:
http://localhost:8080/public/test/1,3,4,50