Spring从Controller中的URL获取所有参数

时间:2018-06-27 14:13:26

标签: java spring spring-mvc

我在前端有一个表格,用户可以从月份列表中选择年份和一个或多个月份。这些参数将作为Get方法发送到Controller。  给定这样的URL:

..../{year}/{months}/excel/

其中月份是所选月份的可变列表,即[01,02,10

我如何在Controller中接收所有参数? 到目前为止,这是我的控制器:

    @RequestMapping(value = "/{year}/{months}/excel/", method = RequestMethod.GET, produces = EXCEL_FORMAT_HEADER)
    public @ResponseBody
    ModelAndView getRankingByYearExcel(@PathVariable("year") Integer year,
                                       @RequestParam Map<String, Object> months)
 {...}

3 个答案:

答案 0 :(得分:3)

我做到了这一点,并努力工作,将months声明为字符串数组:

@RequestMapping(value = "/{year}/excel/", method = RequestMethod.GET, produces = EXCEL_FORMAT_HEADER)
public @ResponseBody
ModelAndView getRankingByYearExcel(@PathVariable("year") Integer year,
                                   @RequestParam String[] months)

然后在URL中以字符串数组形式发送了变量月份:

../2016/excel/?months=1,3,12

感谢您指导我朝这个方向

答案 1 :(得分:2)

我将@RequestParam Map<String, Object> months更改为@RequestParam String months,然后可以根据逗号分割月份。

String[] monthsList = months.split(",");

monthsList数组将具有所有用户选择的值。

答案 2 :(得分:2)

这是将所有URI模板变量绑定到Map并使用的方法。

首先,您需要将@RequesetParam更改为@PathVariable

example1:

@RequestMapping("{id}/messages/{msgId}")
public String handleRequest4 (@PathVariable Map<String, String> varsMap, Model model) {
    model.addAttribute("msg", varsMap.toString());
    return "my-page";
}

example2:

@GetMapping("/request4/{name}/{age}/address/{city}/{country}")
@ResponseBody
public String handler(@PathVariable Map<String, String> params) {
   StringBuilder builder = new StringBuilder();
   builder.append("URL parameters - <br>");
   for (Entry<String, String> entry : params.entrySet()) {
      builder.append(entry.getKey() + " = " + entry.getValue() + "<br>");
   }
   return builder.toString();
}

有关更多信息,请参见doc1或参见doc2