2012-03-08 2 views
33

Я делаю простой «get» в JBoss/Spring. Я хочу, чтобы клиент передал мне массив целых чисел в URL-адресе. Как установить это на сервере? И показывать, должен ли клиент отправить сообщение?Передача массива или списка на @Pathvariable - Spring/Java

Это то, что я имею прямо сейчас.

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

На клиенте я хотел бы передать что-то вроде

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

Когда я сделал это, я получаю сообщение об ошибке:

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

+0

Вы можете необходимо использовать New Spring 3 UI Field Formatting http://static.springsource.org/spring/docs/3.0.0.RC1/reference/html/ch05s06.html –

ответ

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

(протестирована с Spring MVC 4.0.1)

+0

Поддерживает ли майка этот шаблон? – Priyal85

4

Может сделать @PathVariable иды String, то разбора строка.

Так что-то вроде:

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

Вы бы передать:

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

, если вы хотите использовать площадь кронштейны - []

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

(испытано с Spring MVC 4.1.1)

21

Вы должны сделать что-то вроде этого:

Вызов:

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

Ваш контроллер:

@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

Подтвержденные выше работы с весной 4.2, вероятно, с большей частью весны 4.x. Это также самый Java-подобный ответ. – Idcmp

+0

Поддерживает ли Джерри этот шаблон? – Priyal85