web-dev-qa-db-fra.com

Passer un tableau ou une liste à @Pathvariable - Spring / Java

Je fais un simple "get" dans JBoss/Spring. Je veux que le client me passe un tableau d'entiers dans l'url. Comment configurer cela sur le serveur? Et montrer que 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, je voudrais passer quelque chose comme

 http: // localhost: 8080/public/test/[1,3,4,50] 

Quand je l'ai fait, j'obtiens une erreur:

Java.lang.IllegalStateException: impossible de trouver @PathVariable [firstNameIds] dans @RequestMapping

46
Djokovic
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 Spring MVC 4.0.1)

51
atamanroman

Vous devriez faire quelque chose comme ça:

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";
}
32

si vous souhaitez 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 Spring MVC 4.1.1)

10
한국인

Pourrait faire les identifiants @PathVariable String, puis analyser la chaîne.

Donc 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
3
dardo