在使用SpringMVC的時候自己一直避免使用RequestBody,因為覺的它在參數(shù)處理的時候不夠方便。
理由如下:
1.不使用RequestBody時是這樣的:
前端參數(shù)可以直接使用JSON對象:
//此時請求的ContentType默認是application/x-www-form-urlencoded:
var user= {
"username" : username,
"password" : password,
"rememberMe":rememberMe
};
$.ajax({
url : "http://...../jsontest.do",
type : "POST",
async : true,
data : user,
dataType : 'json',
success : function(data) {
}
});
后端參數(shù)的寫法也很靈活:
@RequestMapping("/jsontest.do")
public void test(User user,String username,String password,Boolean rememberMe){
System.out.println(user);
System.out.println("username: " + username);
System.out.println("password: " + password);
System.out.println("rememberMe: " + rememberMe);
}
2.而使用RequestBody是這樣的:
前端使用application/json的時候,必須要將JSON對象轉換為JSON字符串
//需要使用JSON.stringify()將JSON對象轉化為JSON字符串
var user= {
"username" : username,
"password" : password
};
$.ajax({
url : "http://...../jsontest.do",
type : "POST",
async : true,
contentType: "application/json; charset=utf-8",
data : JSON.stringify(user),
dataType : 'json',
success : function(data) {
}
});
后端參數(shù)的用法也不靈活:
//這種方式下所有的參數(shù)都只能封裝在User對象中,不能單獨設置參數(shù)
@RequestMapping("/jsontest")
public void test(@RequestBody User user ){
String username = user.getUsername();
String password = user.getPassword();
}
或者
@RequestMapping("/jsontest")
public void test(@RequestBody Map map ){
String username = map.get("username").toString();
String password = map.get("password").toString();
}
或者
public void test(@RequestBody String jsonData) {
JSONObject jsonObject = JSON.parseObject(jsonData);
String username= jsonObject.getString("username");
String username= jsonObject.getString("password");
}
兩者比較很明顯:
第1種有以下優(yōu)點:
1.前端傳遞數(shù)據(jù)不用轉換為json字符串:JSON.stringify(user)
2.后端接受的參數(shù)很靈活,即可以封裝為User對象,亦可以使用單個參數(shù)username,rememberMe,甚至User對象和單個rememberMe參數(shù)混合使用都可以
而第2種則沒有第1種簡單和靈活。所以我選擇了不使用RequestBody,而前端發(fā)送的格式也同樣不再是application/json了,而是application/x-www-form-urlencoded。
現(xiàn)在處理數(shù)據(jù)怎么都方便,團隊或項目內部統(tǒng)一規(guī)范就行了。沒必要那么糾結的。像在 ASP.NET MVC 框架中,各種方式傳遞到后端的參數(shù)都可以自動解析到參數(shù)或者模型中。如果 Spring 沒那么智能,在 JSON 方便傳遞數(shù)據(jù)的情況下,后端也可以通過 JSON 庫很容易的把參數(shù)轉換成模型。前端就更不用說了,一般項目里都不會直接用 $.ajax,而是為會封裝一層,按應用要求將簡單傳入的參數(shù)封裝成標簽的 HTTP 調用(不管是 Restful 還是RPC 都可以這么做)。
北大青鳥APTECH成立于1999年。依托北京大學優(yōu)質雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國IT技能型緊缺人才,是大數(shù)據(jù)專業(yè)的國家
達內教育集團成立于2002年,是一家由留學海歸創(chuàng)辦的高端職業(yè)教育培訓機構,是中國一站式人才培養(yǎng)平臺、一站式人才輸送平臺。2014年4月3日在美國成功上市,融資1
北大課工場是北京大學校辦產(chǎn)業(yè)為響應國家深化產(chǎn)教融合/校企合作的政策,積極推進“中國制造2025”,實現(xiàn)中華民族偉大復興的升級產(chǎn)業(yè)鏈。利用北京大學優(yōu)質教育資源及背
博為峰,中國職業(yè)人才培訓領域的先行者
曾工作于聯(lián)想擔任系統(tǒng)開發(fā)工程師,曾在博彥科技股份有限公司擔任項目經(jīng)理從事移動互聯(lián)網(wǎng)管理及研發(fā)工作,曾創(chuàng)辦藍懿科技有限責任公司從事總經(jīng)理職務負責iOS教學及管理工作。
浪潮集團項目經(jīng)理。精通Java與.NET 技術, 熟練的跨平臺面向對象開發(fā)經(jīng)驗,技術功底深厚。 授課風格 授課風格清新自然、條理清晰、主次分明、重點難點突出、引人入勝。
精通HTML5和CSS3;Javascript及主流js庫,具有快速界面開發(fā)的能力,對瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁制作和網(wǎng)頁游戲開發(fā)。
具有10 年的Java 企業(yè)應用開發(fā)經(jīng)驗。曾經(jīng)歷任德國Software AG 技術顧問,美國Dachieve 系統(tǒng)架構師,美國AngelEngineers Inc. 系統(tǒng)架構師。