2015-11-02 80 views
1

我有一个像Spring框架不映射列表请求参数正确

/path?param=value1&param=value2 

映射到一个List<String> PARAM控制器端的web请求。

需要注意的重要一点是,value1和value2的值可以包含逗号(,)。

我看到2个不同的行为与春季请求参数映射。

情况1 /path?param=part1%2Cpart2 (url encoded comma)

弹簧请求参数映射这对尺寸2 part1的第2部分和作为元素的列表,但HttpServletRequest.getParameterValues("param")被正确地分配给尺寸1的阵列值= part1的,第2部分

案例2. /path?param=part1%2Cpart2&param=part3%2Cpart4

在这种情况下,Spring正确地将其映射到2个值的列表,HttpServletRequest参数也是如此。

我猜Spring支持使用csv值映射List参数并重复参数。有没有办法告诉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

从SpringMVC 3的经验,我从来没有见过'@控制器'处理GET参数中的多个键。发布你的'@ Controller'代码,然后我们有更多的信息可以使用。 –

+0

添加了控制器代码。 – pkrish

回答

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 
+0

主要问题是我的值包含逗号。你可以尝试用param = test,value来替换param = 3吗? – pkrish

+0

这是最接近你从SpringMVC获取列表的内容,据我昨天看到的,如果你想让它工作,你需要以'param = test&param = value'的格式发送它,或者用'String [] subparams = param.split(“,”)手动分割它;' –

+0

认为你误解了。 “test,value”是1个参数,但spring会将其分解为2.请参阅问题中的上述2个案例。 – pkrish