springboot也可以利用@RequestParam Map<String,Object> reqMap来获取所有的传递参数。
因为传个我的参数不定,所以需要通过map来接收参数(表单提交请求,多个参数)
利用如下程序实现但是发现map里并没有获取到传来的key-value值,而且因为页面是表单提交数据,会报415错误,如果去掉@RequestBody就不能得到传来的key-value值。
@RequestMapping("/api/ajax/{route}")
public String submit(@PathVariable String route,@RequestBody Map<String,Object> reqMap,HttpServletRequest request)
{
return onSubmit(route,new PostDataInterface()
{
}
abstract protected String onSubmit(String route,PostDataInterface pd);
}
之后我发现HttpServletRequest有一个getParameterMap方法好像很牛逼的样子,但是仍然不行。
@RequestMapping("/api/ajax/{route}")
public String submit(@PathVariable String route,HttpServletRequest request)
{
Map<String, Object> params = request.getParameterMap();
return onSubmit(route,new PostDataInterface()
{
}
abstract protected String onSubmit(String route,PostDataInterface pd);
}
然而这么写还是不对,因为这个方法其实是返回的一个Map<String, String[]>对象,而不是我想象中的简单的Map<String, Object>类型,这里是可以获得正确的参数的,但是需要手动进行转换,不可能是这种情况呀,一定有更好的解决办法
“用@RequestParam试试”,结果正确。
@RequestMapping("/api/ajax/{route}")
public String submit(@PathVariable String route,@RequestParam Map<String,Object> reqMap,HttpServletRequest request)
{
return onSubmit(route,new PostDataInterface()
{
}
abstract protected String onSubmit(String route,PostDataInterface pd);
}
对于只使用一个Map接收AJAX参数的情况,并且CONTENT-TYPE为默认的application/x-www-form-urlencoded时,就必须加上@RequestParam,可能是SPRING MVC的该注解的处理器能够自动将参数包装到一个Map中,这里先记下来,源码今后再研究。