基于@RequestBody和@ResponseBody及Stringify()的作用說明
@RequestBody和@ResponseBody及Stringify()的作用
首先,在項目的前后交互中json數(shù)據(jù)格式比較常用,普遍認為json格式比較簡單,易于解析
如果我們在前端發(fā)送一個ajax請求的話

可以看到是用json字符串格式向后臺傳請求參數(shù),那么后臺需要采用@RequestBody來處理請求的json格式數(shù)據(jù),將json數(shù)據(jù)轉(zhuǎn)換為java對象,否則springmvc就不能解析導(dǎo)致傳空參的結(jié)果

一般在異步獲取數(shù)據(jù)時使用,在使用@RequestMapping后,返回值通常解析為跳轉(zhuǎn)路徑,加上@responsebody后返回結(jié)果不會被解析為跳轉(zhuǎn)路徑,而是直接寫入HTTP response body中。
而 @ResponseBody就可以理解成將java的對象轉(zhuǎn)換成json字符串的格式給前端解析(json數(shù)據(jù)格式解析比較簡單)
如果加上@ResponseBody注解,就不會走視圖解析器,不會返回頁面,目前返回的json數(shù)據(jù)。如果不加,就走視圖解析器,返回頁面

現(xiàn)在在開發(fā)項目有喜歡用key/value的格式傳給后臺。此方法比較常用。在ajax的data中寫 ‘name=我&age=12'這個就不用就可以不用加@RequestBody
這里看下項目中請求的格式可以采用qs.stringify()方法將對象或者數(shù)組轉(zhuǎn)換為一個key/value的格式。這個時候后臺接受就可以不用加@RequestBody。
在這里需要注意的是,JSON中同樣存在stringify()方法,但是兩者之間的區(qū)別是很明顯的,json的stringify()是返回json字符串
‘{"uid":"cs11","pwd":"000000als","username":"cs11","password":"000000als"}'
但是qs.stringify()是返回key/vlue的拼接:
uid=cs11&pwd=000000als&username=cs11&password=000000als

總結(jié):
客戶端請求的數(shù)據(jù)是json字符串,springmvc不能直接解析,加@requestBody解析成對象,客戶端請求的是key/value的拼接不需要加@requestBody,@responseBody返回json字符串,如果是ajax請求,我們想到得到j(luò)son對象的話(為了方便根據(jù)key取value)
在ajax中增加如下:
dataType: "json"
@RequestBody和@ResponseBody的簡單使用接收JSON(接收json數(shù)據(jù))
1、想要使用@RequestBody和@ResponseBody呢必須要使用注解的適配器和映射器,至于為什么應(yīng)該不用多說。
在springMVC中進行配置:
<!-- 使用注解的映射器和適配器 --> <mvc:annotation-driven/>
2、User類中的字段:ID、name、age、address、sex、phone
3、寫一個controller
@RequestMapping("/bodyTest")
@ResponseBody
public User testBody(@RequestBody User user){
return user;
}
4、通過火狐瀏覽器的HTTPRequester插件進行測試,那么測試的時候需要注意什么呢?

5、當(dāng)然了,你應(yīng)該也注意到上面我的Controller的方法上加了一個@ResponseBody,那么他的作用是什么呢?
在上面的Controller中我返回的是User對象,但是在上圖的右側(cè)可以看到返回的值,自動轉(zhuǎn)換成了JSON格式
{"id":1,"name":"jin","sex":"man","address":"moerben","age":"12","phone":"110"}
6、網(wǎng)上有說@requestBody需要接收的是一個String化的參數(shù),在傳參時可以使用JSONObject.stringiffy(json);這個方法來進行轉(zhuǎn)化。toString應(yīng)該也是可以的。這兩種情況尚未 使用暫時不發(fā)表意見,僅提供參考。
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
淺談Java中@Autowired和@Inject注解的區(qū)別和使用場景
本文主要介紹了淺談Java中@Autowired和@Inject注解的區(qū)別和使用場景,@Autowired注解在依賴查找方式和注入方式上更加靈活,適用于Spring框架中的依賴注入,而@Inject注解在依賴查找方式上更加嚴格,適用于Java的依賴注入標準,感興趣的可以了解一下2023-11-11
Java8通過CompletableFuture實現(xiàn)異步回調(diào)
這篇文章主要介紹了Java8通過CompletableFuture實現(xiàn)異步回調(diào),CompletableFuture是Java?8?中新增的一個類,它是對Future接口的擴展,下文關(guān)于其更多相關(guān)詳細介紹需要的小伙伴可以參考一下2022-04-04
Springboot mybatis-plus配置及用法詳解
這篇文章主要介紹了Springboot mybatis-plus配置及用法詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-09-09

