JSON對象和JSON字符串、@RequestBody和@ResponseBody

首先明白前端兩種數據格式的區別:

  • JSON對象是直接可以使用JQuery操作的格式,如C#中可以用對象(類名)點出屬性(方法)一樣
  • JSON字符串僅僅只是一個字符串,一個整體,不截取的話沒辦法取出其中存儲的數據,不能直接使用,除非你只想alert()他;

JSON對象:{ name:"deluyi", sex: "man" }

JSON字符串:"{ 'name': 'deyuyi', 'sex': 'man' }"

 

@RequestBody主要用來接收前端傳遞給後端的JSON字符串中的數據的(請求體中的數據的);

GET方式無請求體,所以使用@RequestBody接收數據時,前端不能使用GET方式提交數據,而是用POST方式進行提交。

在後端的同一個接收方法裏,@RequestBody 與@RequestParam()可以同時使用,@RequestBody最多只能有一個,而@RequestParam()可以有多個。原因:@requestbody的含義就是在當前對象獲取整個http請求的body裏面的所有數據

注:  1.一個請求,只有一個RequestBody,但可以有多個RequestParam。2.用String 作爲@RequestBody會將json字符串的值完全接下來而沒有做映射;如果需要做屬性的映射,應該創建一個實體類作爲@RequestBody。

 如果ContentType設置成application/json,傳入後臺的話,那麼後臺必須要用@RequestBody才能接收到;一般的表單提交和JQuery、ajax表單提交,即content-type=application/x-www-form-urlencoded這種情況,後端要用@RequestParam()或@ModelAndView來接收,或省略即形參前什麼也不寫

 

總結:@requestBody註解常用來處理content-type不是默認的application/x-www-form-urlcoded編碼的內容,比如說:application/json或者是application/xml等。一般情況下來說常用其來處理application/json類型。但是,在一些特殊情況@requestBody也可以用來處理content-type類型爲application/x-www-form-urlcoded的內容,只不過這種方式不是很常用,在處理這類請求的時候,@requestBody會將處理結果放到一個MultiValueMap<String,String>中,這種情況一般在特殊情況下才會使用,例如jQuery easyUI的datagrid請求數據的時候需要使用到這種方式、小型項目只創建一個POJO類的話也可以使用這種接受方式。

詳情可參考:https://blog.csdn.net/f45056231p/article/details/84972881

 

 

@ResponseBody註解的作用是將controller的方法返回的對象通過適當的轉換器轉換爲指定的格式之後,寫入到response對象的body區,通常用來返回JSON數據或者是XML數據。需要注意的是,在使用此註解之後不會再走視圖解析器,而是直接將數據寫入到輸出流中,它的效果等同於通過response對象輸出指定格式的數據。

  • 一般情況下,對於SpringMVC,通過請求路徑映射到方法後,執行方法體,最後會返回Sting類型或者ModelAndView,然後會跳轉到相應路徑的jsp視圖。(常用在後臺管理系統或一些前後端不分離的項目中)
  • 如果在方法頭,返回類型前註明@ResponseBody,則SpinrgMVC在執行完方法後不再會根據路徑返回視圖,而是返回一個封裝了後端從數據庫取得並業務化的數據和一些提示信息的JSON對象。(常用在前後端分離的項目中)前端拿到JSON對象後,再取出並顯示數據,然後做相關的頁面渲染和動畫。
    @RequestMapping("/login")
   @ResponseBody
  public User login(User user){
    return user;
  }
  User字段:userName pwd
  那麼在前臺接收到的數據爲:'{"userName":"xxx","pwd":"xxx"}'

  效果等同於如下代碼:
  @RequestMapping("/login")
  public void login(User user, HttpServletResponse response){
    response.getWriter.write(JSONObject.fromObject(user).toString());
  }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章