1. 程式人生 > >GET和POST請求中,url中的引數和form表單中的引數怎麼區分

GET和POST請求中,url中的引數和form表單中的引數怎麼區分

在和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[]陣列就能很好地處理同名引數。

原來一直對此疑惑不解,這次記下了。