(轉(zhuǎn)載)前端以form-data方式/raw方式發(fā)送post請(qǐng)求的區(qū)別
原創(chuàng) 隨機(jī)漫步_ 最后發(fā)布于2018-11-30 12:57:28 閱讀數(shù) 5515 收藏
展開(kāi)
POST請(qǐng)求
@RequestParam:
① 用來(lái)處理(前端)Content-Type: 為 application/x-www-form-urlencoded或者form-data編碼的內(nèi)容
② 該注解有兩個(gè)屬性: value、required; value用來(lái)指定要傳入值的id名稱,required用來(lái)指示參數(shù)是否必須綁定;
注意這里Headers里不能以application/json作為Content-type,否則后臺(tái)也接收不到請(qǐng)求
采用form-data方式,Headers里應(yīng)該為空.png
采用form-data方式,Headers里不為空時(shí)報(bào)錯(cuò).png
采用form-data方式發(fā)送post請(qǐng)求.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
① 該注解常用來(lái)處理Content-Type: 不是application/x-www-form-urlencoded編碼的內(nèi)容,例如application/json, application/xml等;
前端規(guī)定的是raw方式,那么就需要使用@RequestBody接收參數(shù),注意這里Headers里需要以application/json作為Content-type
以raw方式發(fā)送post請(qǐng)求.png
使用如下代碼可以正常進(jìn)入斷點(diǎn)
@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 等參數(shù)綁定注解詳解
form-data、x-www-form-urlencoded、raw、binary類型
一:form-data
就是http請(qǐng)求中的multipart/form-data,它會(huì)將表單的數(shù)據(jù)處理為一條消息,以標(biāo)簽為單元,用分隔符分開(kāi)。既可以上傳鍵值對(duì),也可以上傳文件。當(dāng)上傳的字段是文件時(shí),會(huì)有Content-Type來(lái)說(shuō)明文件類型;content-disposition,用來(lái)說(shuō)明字段的一些信息;
由于有boundary隔離,所以multipart/form-data既可以上傳文件,也可以上傳鍵值對(duì),它采用了鍵值對(duì)的方式,所以可以上傳多個(gè)文件。
二:x-www-form-urlencoded
application/x-www-from-urlencoded,會(huì)將表單內(nèi)的數(shù)據(jù)轉(zhuǎn)換為鍵值對(duì),如:name=leyangjun&age =28&work=meituan
三:raw
可上傳任意格式的文本,可以上傳text、json、xml、html等各種文本類型
四:binary
等同于Content-Type:application/octet-stream,只可上傳二進(jìn)制數(shù)據(jù),通常用來(lái)上傳文件,由于沒(méi)有鍵值,所以一次只能上傳一個(gè)文件。
注意:
form-data與x-www-form-urlencoded不同之處在于(multipart/form-data:既可以上傳文件等二進(jìn)制數(shù)據(jù),也可以上傳表單鍵值對(duì),只是最后會(huì)轉(zhuǎn)化為一條信息; x-www-form-urlencoded:只能上傳鍵值對(duì),且鍵值對(duì)都是間隔分開(kāi)。)
打印請(qǐng)求日志, 表單和body的區(qū)別
After request [uri=/managerConfig/modifyConfigAboutAppUserLogin;payload=id=3®istGivenPrice=0.00&openRegistry=true&visibleItemNotLogin=false&defaultAppViewClassifyLevel=2]
After request [uri=/item/createItem;payload={"name":"???","pictureUrl":"https://saturn-titan.oss-cn-qingdao.aliyuncs.com/demo/item/1546513139886pB7G82X.jpeg","itemBrand":"","describe":"??","itemClassifyId":5,"packageType":"BULK","suplyUnit":"?","warningAmount":0,"tags":"","priceGroups":[{"name":"???","optionalPrice":"0","priceType":"FLOW","priceGroupId":1,"promotionOptionalPrice":"","promotionSwitch":false}],"specification":{"itemUnit":"?","limitedPerchase":999,"minExpectedProfitmargin":10,"maxExpectedProfitmargin":50,"salePrice":11,"status":"OFF_SALE","unitWeight":11,"basicUnit":"?"}}]
點(diǎn)贊 2
收藏
分享
————————————————
版權(quán)聲明:本文為CSDN博主「隨機(jī)漫步_」的原創(chuàng)文章,遵循 CC 4.0 BY 版權(quán)協(xié)議,轉(zhuǎn)載請(qǐng)附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/asdfsadfasdfsa/article/details/84647231