2012-03-08 36 views
33

Estoy haciendo un simple 'get' en JBoss/Spring. Quiero que el cliente me pase una matriz de enteros en la url. ¿Cómo configuro eso en el servidor? ¿Y mostrar si el cliente envía el mensaje?Pasando una matriz o lista a @Pathvariable - Spring/Java

Esto es lo que tengo ahora.

@RequestMapping(value="/test/{firstNameIds}", method=RequestMethod.GET) 
@ResponseBody 
public String test(@PathVariable List<Integer> firstNameIds) 
{ 
    //What do I do?? 
    return "Dummy"; 
} 

En el cliente me gustaría transmitir algo así como

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

Cuando hice que me da un error:

java.lang.IllegalStateException: Could not find @PathVariable [firstNameIds] in @RequestMapping

+0

Es posible que es necesario utilizar el formato de campo de la interfaz de usuario de New Spring 3 http://static.springsource.org/spring/docs/3.0.0.RC1/reference/html/ch05s06.html –

Respuesta

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

(probado con Spring MVC 4.0.1)

+0

¿Admite la camiseta este patrón? – Priyal85

4

podía hacer Identificadores de cadena @PathVariable, a continuación, analizar el cuerda.

Así que algo como:

@RequestMapping(value="/test/{firstNameIds}", method=RequestMethod.GET) 
@ResponseBody 
public String test(@PathVariable String firstNameIds) 
{ 
    String[] ids = firstNameIds.split(","); 
    return "Dummy"; 
} 

Usted lo pase en:

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

si desea utilizar la plaza corchetes - []

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

(Probado con Spring MVC 4.1.1)

21

Usted debe hacer algo como esto:

Llamar:

GET http://localhost:8080/public/test/1,2,3,4

Su 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"; 
} 
+0

Confirmado que lo anterior funciona con Spring 4.2, probablemente con la mayoría de Spring 4.x. Esta es también la respuesta más similar a Java que se ofrece. – Idcmp

+0

¿Jersey admite este patrón? – Priyal85

Cuestiones relacionadas