Spring框架没有正确映射列表请求参数

时间:2015-11-02 18:48:02

标签: spring spring-mvc

我有一个像

这样的网络请求
/path?param=value1&param=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&param=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;
 }

1 个答案:

答案 0 :(得分:1)

我以前从未见过这个,但是已经做了一些阅读,推荐的POST方法似乎是传递值如下:

/path?param=value1&param=value2&param=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&param=3&param=5&param=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