1. 程式人生 > >前端以form-data方式/raw方式傳送post請求的區別

前端以form-data方式/raw方式傳送post請求的區別

POST請求
@RequestParam:
① 用來處理(前端)Content-Type: 為 application/x-www-form-urlencoded或者form-data編碼的內容
② 該註解有兩個屬性: value、required; value用來指定要傳入值的id名稱,required用來指示引數是否必須繫結;
注意這裡Headers裡不能以application/json作為Content-type,否則後臺也接收不到請求

採用form-data方式,Headers裡應該為空.png

採用form-data方式,Headers裡不為空時報錯.png

採用form-data方式傳送post請求.png

Control中方法

 

    @RequestMapping(value = "/del", method = RequestMethod.POST)
    public ResponseObj<Boolean> delete(@RequestParam String enterpriseId,
                                       @RequestParam String operator,
                                       @RequestParam String status) {
        int i = enterpriseBaseMapper.deleteByPrimaryKey(enterpriseId);
        if (i == 1)
            return new ResponseObj<Boolean>(true, RetCode.SUCCESS);
        return new ResponseObj<Boolean>(false, RetCode.FAIL);
    }

@RequestBody
① 該註解常用來處理Content-Type: 不是application/x-www-form-urlencoded編碼的內容,例如application/json, application/xml等;
前端規定的是raw方式,那麼就需要使用@RequestBody接收引數,注意這裡Headers裡需要以application/json作為Content-type

以raw方式傳送post請求.png

 

使用如下程式碼可以正常進入斷點

@RequestMapping(value = "/del", method = RequestMethod.POST)
    public ResponseObj<Boolean> delete(/*@RequestParam String enterpriseId,
                                       @RequestParam String operator,
                                       @RequestParam String status*/
                                       @RequestBody Map<String,Object> map) {
        String enterpriseId = (String) map.get("enterpriseId");
        String operator = (String) map.get("operator");
        String status = (String) map.get("status");
        int i = enterpriseBaseMapper.deleteByPrimaryKey(enterpriseId);
        if (i == 1)
            return new ResponseObj<Boolean>(true, RetCode.SUCCESS);
        return new ResponseObj<Boolean>(false, RetCode.FAIL);
    }

那麼以後儘量使用@RequestBody Map<String,Object> map這種形式
@RequestParam @RequestBody @PathVariable 等引數繫結註解詳解

 

form-data、x-www-form-urlencoded、raw、binary型別


一:form-data

就是http請求中的multipart/form-data,它會將表單的資料處理為一條訊息,以標籤為單元,用分隔符分開。既可以上傳鍵值對,也可以上傳檔案。當上傳的欄位是檔案時,會有Content-Type來說明檔案型別;content-disposition,用來說明欄位的一些資訊;

由於有boundary隔離,所以multipart/form-data既可以上傳檔案,也可以上傳鍵值對,它採用了鍵值對的方式,所以可以上傳多個檔案。

二:x-www-form-urlencoded

application/x-www-from-urlencoded,會將表單內的資料轉換為鍵值對,如:name=leyangjun&age =28&work=meituan

三:raw

可上傳任意格式的文字,可以上傳text、json、xml、html等各種文字型別
四:binary

          等同於Content-Type:application/octet-stream,只可上傳二進位制資料,通常用來上傳檔案,由於沒有鍵值,所以一次只能上傳一個檔案。

注意:

form-data與x-www-form-urlencoded不同之處在於(multipart/form-data:既可以上傳檔案等二進位制資料,也可以上傳表單鍵值對,只是最後會轉化為一條資訊; x-www-form-urlencoded:只能上傳鍵值對,且鍵值對都是間隔分開。)