Passando um array ou lista para @Pathvariable - Spring/Java
-
09-12-2019 - |
Pergunta
Estou fazendo um simples 'get' no JBoss/Spring.Quero que o cliente me passe uma matriz de números inteiros na URL.Como faço para configurar isso no servidor?E mostrar se o cliente deve enviar a mensagem?
Isso é o que tenho agora.
@RequestMapping(value="/test/{firstNameIds}", method=RequestMethod.GET)
@ResponseBody
public String test(@PathVariable List<Integer> firstNameIds)
{
//What do I do??
return "Dummy";
}
No cliente eu gostaria de passar algo como
http://localhost:8080/public/test/[1,3,4,50]
Quando fiz isso, recebo um erro:
java.lang.IllegalStateException:Não foi possível encontrar @PathVariable [firstNameIds] em @RequestMapping
Solução
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";
}
(testado com Spring MVC 4.0.1)
Outras dicas
Você deveria fazer algo assim:
Chamar:
GET http://localhost:8080/public/test/1,2,3,4
Seu controlador:
@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";
}
se você quiser usar colchetes - []
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";
}
(Testado com Spring MVC 4.1.1)
Poderia fazer @PathVariable String ids e depois analisar a string.
Então, algo como:
@RequestMapping(value="/test/{firstNameIds}", method=RequestMethod.GET)
@ResponseBody
public String test(@PathVariable String firstNameIds)
{
String[] ids = firstNameIds.split(",");
return "Dummy";
}
Você passaria:
http://localhost:8080/public/test/1,3,4,50
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow