我有一个像
这样的网络请求/path?param=value1¶m=value2
映射到Controller端的List<String>
参数。
要注意的重要方面是value1和value2的值可以包含逗号(,)。
我在spring请求参数映射中看到了2种不同的行为。
案例1. /path?param=part1%2Cpart2 (url encoded comma)
Spring请求参数将此映射到大小为2的List,其中part1和part2作为元素,但HttpServletRequest.getParameterValues("param")
被正确分配给大小为1的数组,其中value = part1,part2
案例2. /path?param=part1%2Cpart2¶m=part3%2Cpart4
在这种情况下,Spring正确地将其映射到2个值的列表,HttpServletRequest参数也是如此。
我猜Spring支持使用csv值映射List
参数并重复参数。有没有办法告诉Spring使用特定的映射方法?
我正在使用spring-mvc 3.2.13
@Controller
public class MyController {
@RequestMapping(value = "/mymethod", method = RequestMethod.POST)
public @ResponseBody Boolean method(MyRequest myReq, HttpServletRequest request) {
}
}
public class MyRequest {
List<String> param;
}
答案 0 :(得分:1)
我以前从未见过这个,但是已经做了一些阅读,推荐的POST方法似乎是传递值如下:
/path?param=value1¶m=value2¶m=value3
然后在@Controller
中,让@RequestParam
包含值param[]
- 请注意方括号。
@RequestMapping(value="/path", method = RequestMethod.POST)
public void doSomething(@RequestParam(value = "param[]") String[] paramValues){...}
我没有测试POST
,但我测试了GET
并且我使用了它:
/path?code=1&height=300&width=300¶m=3¶m=5¶m=7
然后在我的@Controller
@ResponseBody
@RequestMapping(value = "/path", method = RequestMethod.GET)
public void blah(
HttpServletResponse response,
@RequestParam("code") String code,
@RequestParam("width") Integer width,
@RequestParam("height") Integer height,
@RequestParam(value = "param") String[] params) {
for (int i = 0; i < params.length; i++){
System.out.println(params[i]);
}
这打印
3
5
7