从 Spring 文档中,我获取了以下内容:
公共 @interface 请求参数
指示方法参数应绑定到 Web 请求参数的注释。支持 Servlet 和 Portlet 环境中的带注释的处理程序方法。
...
如果方法参数是 Map 或 MultiValueMap 并且未指定参数名称,则使用所有请求参数名称和值填充 map 参数。
现在我创建了一个用于测试目的的控制器。它有一个 GET 和一个 POST 方法,每个都使用@RequestParam java.util.Map作为唯一参数。在方法主体中,我只是想打印地图的大小。当我仅在 GET 方法中发送请求 (GET/POST) 时,地图包含任何键/值对。我在 Firefox 中使用 Poster 插件,并发送三个参数。
import java.util.Map;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class TestController {
@RequestMapping(value="test/method", method = RequestMethod.GET)
@ResponseBody
public String testmethodGet(@RequestParam Map<String, String> params) {
System.out.println("GET: " + params.size()); // prints GET: 3
return "";
}
@RequestMapping(value="test/method", method = RequestMethod.POST)
@ResponseBody
public String testmethodPost(@RequestParam Map<String, String> params) {
System.out.println("POST: " + params.size()); // prints POST: 0
return "";
}
}
你们中的任何人都知道为什么@RequestParam Map 不适用于 POST 请求,或者我是否需要更改某些内容才能使其工作?
谢谢。