在和web前端开发过程中,经常会遇到使用form表单提交POST请求和GET请求。
一般GET请求格式如下: http://xxx../path?key1=value1&key2=value2
而POST请求的参数一般在请求体中。
但是有时会发现,web端提交的POST请求的路径中,包含了接口中的参数,和GET请求的格式是一样的。
这就心生疑惑,这两种形式到底怎么区分?
在请求体和Url中,如果同时存在同名参数,那么那个值才是后台真正拿到的呢?
为此,专门写了测试接口来测试以上情况,后台打印来看看到底是神马情况:
后台使用SpringMVC+Mybatis,控制器代码如下:
@RequestMapping(value = "/test", method = {RequestMethod.GET, RequestMethod.POST})
@ResponseBody
public ResultModel test(HttpServletRequest request, HttpServletResponse response) {
ResultModel resultModel = null;
Map<String, String[]> paramMap = request.getParameterMap();
for (Map.Entry<String, String[]> entry : paramMap.entrySet()) {
String key = entry.getKey();
String[] values = entry.getValue();
System.out.println("key = " + key);
for (String value : values) {
System.out.println("---value = " + value);
}
}
return resultModel;
}
使用Postman模拟浏览器发送POST请求,截图如下:
URL中存在参数k1=v1,form表单中存在参数k1=v2,send之后,观察后台打印:
key = k1
---value = v1
---value = v2
原来两个同名参数的值都能在后台拿到,难怪request.getParamterMap()方法的返回值类型是Map<String, String[]>,
第二个String[]数组就能很好地处理同名参数。
原来一直对此疑惑不解,这次记下了。