Http请求之GET,POST,PUT,DELETE方法详解

Http定义了与服务器交互的不同方法,最基本的方法有4种,分别是GET,POST,PUT,DELETE。简单的来讲,对应的分别是查询,新增,修改,删除四种操作。基本已经满足了对于我们的大部分需求。

1.GET请求

一般情况下,通过接口查询相应的数据时一般是采用GET请求,

 @RequestMapping(value = "/order/{no}", method = RequestMethod.GET)
    public BaseResponse queryTaxiNo(@NotNull @PathVariable("no") String no) throws RuntimeException {
        return BaseResponse.success(apiTaxiService.queryTaxiNo(no));
    }

这里是采用的GET请求中的path参数,需要定义相应的注解来进行接收。

@RequestMapping(value = "/canUse", method = RequestMethod.GET)
    public BaseResponse getTaxiCanUse(@NotNull String estimate_price) throws RuntimeException {
        return BaseResponse.success(apiTaxiService.getTaxiCanUse(estimate_price));
    }

这里采用的是GET请求中的query参数,不需要定义相关的注解,拿到参数后进而去进行封装拼接,最后在接口路径后面跟上?进行请求即可。注意采用query格式的时候,参数是不加密的,所以重要数据的话还是要自己斟酌一下。

这里推荐一个参数拼接方法,如果参数为空则不进行拼接的话,可以采用这样的方法。

public static String GetKeyValueUrl(Map<String, Object> parmeters, boolean removeEmptyParameter) {
        String keyValueUrl = "";
        if (removeEmptyParameter) {
            for (Map.Entry<String, Object> e : parmeters.entrySet()) {
                if (!StringUtils.isEmpty(e.getValue())) {
                    keyValueUrl += e.getKey() + "=" + e.getValue().toString() + "&";
                }
            }
        } else {
            for (Map.Entry<String, Object> e : parmeters.entrySet()) {
                keyValueUrl += e.getKey() + "=" + e.getValue().toString() + "&";
            }
        }
        if (keyValueUrl.endsWith("&")) {
            keyValueUrl = keyValueUrl.substring(0, keyValueUrl.length() - 1);
        }
        return keyValueUrl;
    }

简单的讲,前台首先用map接收需要拼接的参数,然后将map传进来的同时,传入一个true即可。最后用一个string类型接收即可。

另外一种不管参数是否为空都要拼接传值的话,可以适当采用另外一种方法。

 public String getSing(Map md5params) {

        //吧
        String[] keyList = arraysMap(md5params);

        //拼接参数
        String sing = null;
        for (int i = 0; i < keyList.length; i++) {
            if (sing != null) {
                sing = sing + keyList[i].toLowerCase() + "=" + md5params.get(keyList[i]) + "&";
            } else {
                sing = keyList[i].toLowerCase() + "=" + md5params.get(keyList[i]) + "&";
            }
        }
        sing = sing + "md5key=" + key;

        //MD532位加密并大写
        return DigestUtils.md5Hex(sing).toUpperCase();
    }

采用中间一部分即可。

2.POST方式

post方法一般用于创建订单或者创建的某个动作,有的公司还会将修改的操作也加入进来,讲实话,还是用post方法专注于一个动作最好。


这里是post方法中的formData格式,这种格式可以和普通的get传入参数一样,后台进行接收值即可,当然,这里值是加密的。

{
  "toStation": "suzhou",
  "queryKey": "61091f6881f67ad1c847d9e17ee0edff",
  "passengers": [
    {
      "birthday": "",
      "passengerName": "",
      "passengerType": "1",
      "idType": "1",
      "ticketPrice": "59.5",
      "idCard": "****",
      "seatClass": "firstseat",
      "sex": "1"
    },
    {
      "birthday": "",
      "passengerName": "",
      "passengerType": "1",
      "idType": "1",
      "ticketPrice": "59.5",
      "idCard": "****",
      "seatClass": "firstseat",
      "sex": "1"
    }
  ],
  "orderNo": "",
  "contactInfo": {
    "person": "",
    "cellphone": ""
  },
  "acceptNoSeat": "0",
  "appKey": "",
  "trainNo": "",
  "fromStation": ""
}

这就是第二种方式,自定义json传值,这个一般有两种做法,第一种就是前台定义好传入的json格式,后台定义相应的dto去进行接收(个人建议这种)。第二种就是后台定义jsonobject进行组装,然后在后台把定义好的json格式的参数传到第三方。。孰轻孰重想必不需要我多解释了。。。

3.PUT请求

put请求专注于update操作,但是与之相关的是还有一个patch请求,两者虽然都专注于update操作,但是前者是全局而言,后者是局限于某一条件或者范围而言,简单的说就是两者的粒度是不同的。大家可以百度一下。

put请求需要注意的是,虽然和post请求都是执行的改变动作,但是它所采用的参数传递需要用到query格式,否则是拿不到前台传递的参数,通俗的说就是参数为null.

4.DELETE请求

顾名思义,就是执行相应的删除操作,配合数据库进行相应的删除动作。

正常情况来讲,四种不同的请求方法用好以后,大部分的操作都是可以涵盖的了。

猜你喜欢

转载自blog.csdn.net/T_james/article/details/80322414