在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/Java/ 傳遞JSON數(shù)據(jù)有沒有必要用RequestBody?

傳遞JSON數(shù)據(jù)有沒有必要用RequestBody?

想問一下大家,在傳遞json數(shù)據(jù)的時候你們一般是用的哪種方法?到底有沒有必要使用RequestBody的方式來處理請求?

在使用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。

所以想問一下大家,在傳遞json數(shù)據(jù)的時候你們一般是用的哪種方法?到底有沒有必要使用RequestBody的方式來處理請求?

回答
編輯回答
使勁操

現(xiàn)在處理數(shù)據(jù)怎么都方便,團隊或項目內部統(tǒng)一規(guī)范就行了。沒必要那么糾結的。像在 ASP.NET MVC 框架中,各種方式傳遞到后端的參數(shù)都可以自動解析到參數(shù)或者模型中。如果 Spring 沒那么智能,在 JSON 方便傳遞數(shù)據(jù)的情況下,后端也可以通過 JSON 庫很容易的把參數(shù)轉換成模型。前端就更不用說了,一般項目里都不會直接用 $.ajax,而是為會封裝一層,按應用要求將簡單傳入的參數(shù)封裝成標簽的 HTTP 調用(不管是 Restful 還是RPC 都可以這么做)。

2018年7月1日 23:55