GET和POST請求中,url中的引數和form表單中的引數怎麼區分
阿新 • • 發佈:2019-02-09
在和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[]陣列就能很好地處理同名引數。
原來一直對此疑惑不解,這次記下了。