将数组或列表传递给@Pathvariable - Spring/Java
Posted
技术标签:
【中文标题】将数组或列表传递给@Pathvariable - Spring/Java【英文标题】:Passing an Array or List to @Pathvariable - Spring/Java 【发布时间】:2012-03-26 06:23:44 【问题描述】:我在 JBoss/Spring 中做一个简单的“获取”。我希望客户端在 url 中向我传递一个整数数组。我如何在服务器上设置它?并显示客户端应该发送消息吗?
这就是我现在所拥有的。
@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:在@RequestMapping 中找不到@PathVariable [firstNameIds]
【问题讨论】:
您可能需要使用新的 Spring 3 UI 字段格式static.springsource.org/spring/docs/3.0.0.RC1/reference/html/… 【参考方案1】: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 测试)
【讨论】:
球衣是否支持这种模式? 是的,Jersey 支持这一点,但使用 PathSegment 的方式不同 无法将“java.lang.String”类型的值转换为所需的“java.lang.Long”类型;嵌套异常是 java.lang.NumberFormatException: For input string: "20056,20056" 但是如何区分/id和/ids呢?尝试像@GetMapping(value=["""/id:\d+"""])
和 @GetMapping("""/ids:\d+[,\d+]+""")
那样做,但现在 Spring 告诉我 my-url/123 是模棱两可的(事实并非如此)......
@spyro 我想你可以检查一下ids.size() == 1
?【参考方案2】:
你应该这样做:
致电:
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";
【讨论】:
确认上述适用于 Spring 4.2,可能适用于 Spring 4.x 的大部分。这也是提供的最类似于 Java 的答案。 泽西岛是否支持这种模式? 得到 400 错误代码,这个小改动对我有用。public String test(@PathVariable("firstNameIds") List<Integer> firstNameIds)
我以 ["first","second"] 的形式发送数据。你能告诉我如何使用 PathVariable 在控制器上接受它吗?
@SachinHR : 列表如果你想使用方括号 - []
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 测试)
【讨论】:
这在用方括号括起来时效果很好,但是如果我需要发送用花括号括起来的列表怎么办?这似乎总是在我身上爆炸......【参考方案4】:可以做@PathVariable String ids,然后解析字符串。
比如:
@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
【讨论】:
【参考方案5】:首先,把它放在你的代码中(添加@PathVariable):
@GetMapping(path="/test/firstNameIds",produces = "application/json")
public String test(@PathVariable List<String> firstNameIds)
return "Dummy";
你会传入: http://localhost:8080/public/test/Agent,xxx,yyyy
【讨论】:
以上是关于将数组或列表传递给@Pathvariable - Spring/Java的主要内容,如果未能解决你的问题,请参考以下文章
jQuery DatePicker:如何将年份数组传递给 yearRange 下拉列表
jQuery DatePicker:如何将年份数组传递给yearRange下拉列表
如何通过 cython 将 numpy 数组列表传递给 c++