2015-11-02 57 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