- 后臺(tái)直接接收或通過getRequestParmeter()獲取,前端用
contentType: application/x-www-form-urlencoded
var data = {id:7,audit_content:"123"};
$.ajax({
type: "POST",
url: "/method",
data:data,
contentType: "application/json;charset=utf-8",
success: function (result) {
$("#my_result").html(JSON.stringify(result));
},
error: function () {
console.log("shibai")
}
});
- 后臺(tái)不是接收單個(gè)字符串拯勉,而是一個(gè)實(shí)體類
@RequestBody Body body
,前端用contentType: "application/json;charset=utf-8"
這樣java后臺(tái)會(huì)得到一個(gè)有id和show_status屬性的Body類,注意一定要JSON.stringify(data)憔购,不能直接傳data
var data = {"id": i, "show_status":0};
$.ajax({
type: "POST",
url: "/method2",
data: JSON.stringify(data),
contentType: "application/json;charset=utf-8",
success: function (result) {
$("#my_result").html(JSON.stringify(result));
},
error: function () {
console.log("shibai")
}
});
當(dāng)后臺(tái)通過JavaBean對(duì)象接收參數(shù)時(shí),必須制定method參數(shù).
關(guān)于Form宫峦,你要了解的內(nèi)容
首先,明確下<form>
標(biāo)簽的屬性玫鸟。最重要的有三個(gè)屬性:method
导绷、enctype
、action
屎飘。
- 關(guān)于
method
妥曲,通常取值為GET
贾费、POST
。默認(rèn)GET
- 關(guān)于
action
檐盟,為表單提交到的服務(wù)器地址 - 關(guān)于
enctype
褂萧,通常取值為:application/x-www-form-urlencoded
、multipart/form-data
遵堵、text/plain
箱玷。默認(rèn)application/x-www-form-urlencoded
application/x-www-form-urlencoded
當(dāng)我們的表單中只包含文本數(shù)據(jù),并且采用默認(rèn)形式的enctype
的時(shí)候陌宿,采用GET
锡足、POST
的差別僅在于請(qǐng)求內(nèi)容的存放位置。而請(qǐng)求內(nèi)容均為根據(jù)form中所有表單控件的name值與value構(gòu)成的key1=value1&key2=value2
這樣的形式壳坪。
當(dāng)采用GET提交的方式舶得。GET請(qǐng)求會(huì)附加在URL中。POST請(qǐng)求則附加在請(qǐng)求體中爽蝴。
如果是中文內(nèi)容的請(qǐng)求沐批,還需注意編碼問題。在Tomcat7中URL會(huì)默認(rèn)編碼為ISO8859-1
蝎亚,而在Tomcat8中則默認(rèn)為UTF-8
九孩,這也是曾經(jīng)踩過的一個(gè)坑。
前臺(tái)Html代碼:
<html lang="zh-CN">
<head>
<meta charset="utf-8">
</head>
<body>
<%-- 如果不寫enctype发框,則默認(rèn)enctype=application/x-www-form-urlencoded --%>
<form method="post" action="/form/submit1">
<input name="username1" value="" type="text">
<input name="username2" value="" type="text">
<input type="submit" value="submit">
</form>
</body>
</html>
后臺(tái)接收代碼:
@RequestMapping(value = "/submit1", method = RequestMethod.POST)
@ResponseBody
public String submit1_Get(User user) {
System.out.println(user.getUsername1());
System.out.println(user.getUsername2());
return "ok";
}
關(guān)于后臺(tái)的接收躺彬,我們可以采用@RequstParam接收,或者直接用Java Pojo接收梅惯,更復(fù)雜的接收情況宪拥,可以參考這篇博文: [Spring MVC] - SpringMVC的各種參數(shù)綁定方式
multipart/form-data
當(dāng)我們需要上傳文件的時(shí)候,必須使用這個(gè)屬性铣减。
POST http://www.example.com HTTP/1.1
Content-Type:multipart/form-data; boundary=----WebKitFormBoundaryrGKCBY7qhFd3TrwA
------WebKitFormBoundaryrGKCBY7qhFd3TrwA
Content-Disposition: form-data; name="text"
title
------WebKitFormBoundaryrGKCBY7qhFd3TrwA
Content-Disposition: form-data; name="file"; filename="chrome.png"
Content-Type: image/png
PNG ... content of chrome.png ...
------WebKitFormBoundaryrGKCBY7qhFd3TrwA--
上述代碼為一個(gè)請(qǐng)求的例子她君。首先生成了一個(gè) boundary 用于分割不同的字段,為了避免與正文內(nèi)容重復(fù)葫哗,boundary 很長(zhǎng)很復(fù)雜缔刹。然后 Content-Type 里指明了數(shù)據(jù)是以 mutipart/form-data 來編碼,本次請(qǐng)求的 boundary 是什么內(nèi)容劣针。消息主體里按照字段個(gè)數(shù)又分為多個(gè)結(jié)構(gòu)類似的部分桨螺,每部分都是以 –boundary 開始,緊接著內(nèi)容描述信息酿秸,然后是回車灭翔,最后是字段具體內(nèi)容(文本或二進(jìn)制)。如果傳輸?shù)氖俏募€要包含文件名和文件類型信息肝箱。消息主體最后以 –boundary– 標(biāo)示結(jié)束哄褒。關(guān)于 mutipart/form-data 的詳細(xì)定義,請(qǐng)前往 rfc1867 查看煌张。
由于涉及到文件上傳操作呐赡,所以我們采用POST
提交的方式。 前臺(tái)代碼:
<html lang="zh-CN">
<head>
<meta charset="utf-8">
</head>
<body>
<form method="post" enctype="multipart/form-data" action="/form/submit2">
<input name="username1" value="" type="text">
<input name="username2" value="" type="text">
<input type="file" name="image">
<input type="submit" value="submit">
</form>
</body>
</html>
后臺(tái)代碼:
@RequestMapping(value = "/submit2", method = RequestMethod.POST)
@ResponseBody
public String submit2(User user, @RequestParam("image") MultipartFile file) {
System.out.println(user.getUsername1());
System.out.println(user.getUsername2());
System.out.println(file.getSize());
return "ok";
}
當(dāng)我們使用SpringMVC提供的MultipartFile
時(shí)骏融,需要在配置文件中對(duì)文件上傳的要求進(jìn)行配置
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="104857600"/>
<property name="maxInMemorySize" value="4096"/>
</bean>
或者我們可以使用最原始的方法链嘀,獲取HttpServletRequest
進(jìn)行操作,將request轉(zhuǎn)為MultipartHttpServletRequest
:
MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
multipartRequest.getParameter("image");
更復(fù)雜的情況是:關(guān)于前臺(tái)上傳的數(shù)據(jù)不是簡(jiǎn)單的表單控件的value值档玻,可能需要拼接怀泊、轉(zhuǎn)換操作,這時(shí)我們可以使用HTML5中的FormData解決误趴,具體用法霹琼,大家可自行Google解決
application/json
由于ajax 的大行其道,越來越多的請(qǐng)求帶有該形式凉当,表示向服務(wù)器發(fā)送一個(gè)Json枣申,例如:
POST http://www.example.com HTTP/1.1
Content-Type: application/json;charset=utf-8
{"title":"test","sub":[1,2,3]
前臺(tái)代碼:
<html lang="zh-CN">
<head>
<meta charset="utf-8">
</head>
<body>
<script src="https://cdn.bootcss.com/jquery/3.1.1/jquery.min.js"></script>
<script>
data = {};
data["username1"] = "haha";
data["username2"] = "hahafdf";
$.ajax({
"url": "/form/submit3",
"type": "POST",
"data": JSON.stringify(data),
"dataType":"json",
"contentType":"application/json;charset=UTF-8",
"success": function () {
alert("success");
},
"error": function () {
alert("error");
}
});
</script>
</body>
</html>
需要注意的地方是,需要寫上contentType
看杭,以及Json對(duì)象必須轉(zhuǎn)為字符串格式 后臺(tái)代碼:
@RequestMapping(value = "/submit3", method = RequestMethod.POST)
@ResponseBody
public String submit3(@RequestBody User user) {
System.out.println(user.getUsername1());
System.out.println(user.getUsername2());
return "{}";
}
SpringMVC中接收一個(gè)Json采用RequestBody
忠藤,不能是RequestParam
這一點(diǎn)非常重要,也就是說這兩個(gè)注解不能同時(shí)存在楼雹。
以上模孩。