前端以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:只能上傳鍵值對,且鍵值對都是間隔分開。)