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 paramMap = request.getParameterMap();

        for (Map.Entry 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[]数组就能很好地处理同名参数。

原来一直对此疑惑不解,这次记下了。

你可能感兴趣的:(GET和POST请求中,url中的参数和form表单中的参数怎么区分)