2012-03-08 14 views
33

Sto facendo un semplice 'get' in JBoss/Spring. Voglio che il client mi passi una matrice di numeri interi nell'URL. Come posso configurarlo sul server? E mostrare il client dovrebbe inviare il messaggio?Passaggio di una matrice o elenco a @Pathvariable - Spring/Java

Questo è quello che ho adesso.

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

Sul client vorrei passare qualcosa come

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

Quando ho fatto che ho un errore:

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

+0

Si potrebbe è necessario utilizzare New Spring 3 UI Field Formatting http://static.springsource.org/spring/docs/3.0.0.RC1/reference/html/ch05s06.html –

risposta

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

(testati con Spring MVC 4.0.1)

+0

La maglia supporta questo modello? – Priyal85

4

Potrebbe fare identificatori di stringa @PathVariable, quindi analizzare il stringa.

Quindi qualcosa di simile:

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

È piacerebbe passare in:

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

se si desidera utilizzare Piazza parentesi - []

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

(Testato con Spring MVC 4.1.1)

21

Si dovrebbe fare qualcosa di simile:

chiamata:

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

Il controller:

@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

Confermato quanto sopra funziona con Spring 4.2, probabilmente con la maggior parte di Spring 4.x. Questa è anche la risposta più simile a Java offerta. – Idcmp

+0

Jersey supporta questo modello? – Priyal85

Problemi correlati