Spring?請(qǐng)求之傳遞?JSON?數(shù)據(jù)的操作方法
JSON 概念
JSON:JavaScript Object Notation【JavaScript 對(duì)象表示法】
JSON 就是一種數(shù)據(jù)格式,有自己的格式和語(yǔ)法,使用文本表示一個(gè)對(duì)象或數(shù)組的信息,因此 JSON 本質(zhì)是字符串,主要負(fù)責(zé)在不同的語(yǔ)言中數(shù)據(jù)傳遞和交換
類(lèi)似于:
- 國(guó)際通用語(yǔ)言——英語(yǔ)
- 中國(guó) 56 個(gè)民族不同地區(qū)的通用語(yǔ)言——普通話(huà)
有自己的語(yǔ)法,其他語(yǔ)言也認(rèn)識(shí)
JSON 和 JavaScript 沒(méi)有關(guān)系,只是語(yǔ)法類(lèi)似,JavaScript 開(kāi)發(fā)者能更快的上手而已,但是他的語(yǔ)法本身比較簡(jiǎn)單,所以也很好學(xué)
JSON 語(yǔ)法
JSON 是一個(gè)字符串,其格式非常類(lèi)似于 JavaScript 對(duì)象字面量的格式。我們先來(lái)看一段 JSON 數(shù)據(jù):
{
"squadName": "Super hero squad",
"homeTown": "Metro City",
"formed": 2016,
"secretBase": "Super tower",
"active": true,
"members": [
{
"name": "Molecule Man",
"age": 29,
"secretIdentity": "Dan Jukes",
"powers": [
"Radiation resistance","Turning tiny","Radiation blast"]
},
{
"name": "Madame Uppercut",
"age": 39,
"secretIdentity": "Jane Wilson",
"powers": [
"Million tonne punch","Damage resistance","Superhuman reflexes"]
},
{
"name": "Eternal Flame",
"age": 1000000,
"secretIdentity": "Unknown",
"powers": [
"Immortality","Heat Immunity","Inferno","Teleportation"]
}
]
}也可以壓縮表示:
{"squadName":"Super hero squad","homeTown":"Metro City","formed":2016,"secretBase":"Super tower","active":true,"members":[{"name":"Molecule Man","age":29,"secretIdentity":"Dan Jukes","powers":["Radiation resistance","Turning tiny","Radiation blast"]},{"name":"Madame Uppercut","age":39,"secretIdentity":"Jane Wilson","powers":["Million tonne punch","Damage resistance","Superhuman reflexes"]},{"name":"Eternal Flame","age":1000000,"secretIdentity":"Unknown","powers":["Immortality","Heat Immunity","Inferno","Teleportation"]}]}和上面描述的數(shù)據(jù)一樣,只不過(guò)上面進(jìn)行了格式化,更易讀
JSON 的語(yǔ)法
- 數(shù)據(jù)在鍵值對(duì)(
Key/Value)中 - 數(shù)據(jù)由
,分隔 - 對(duì)象用
{}表示 - 數(shù)組用
[]表示 - 值可以為對(duì)象,也可以為數(shù)組,數(shù)組中可以包含多個(gè)對(duì)象
JSON 的兩種結(jié)構(gòu)
對(duì)象:大括號(hào) {} 保存的對(duì)象是一個(gè)無(wú)序的鍵值對(duì)集合。一個(gè)對(duì)象以左括號(hào) { 開(kāi)始,右括號(hào) } 結(jié)束。每個(gè)“鍵”后跟一個(gè)冒號(hào) :,鍵值對(duì)使用逗號(hào) , 分隔
數(shù)組:中括號(hào) [] 保存的數(shù)組是值(value)的有序集合。一個(gè)數(shù)組以左中括號(hào) [ 開(kāi)始,右中括號(hào) ] 結(jié)束。值之間使用 , 分隔

所以,以下都是合法的 JSON 數(shù)據(jù):
{"name": "admin", "age": 18}
["hello", 3.1415, "json"]
[{"name": "admin", "age": 18}, {"name": "root", "age": 16}, {"name": "張三", "age": 20}]JSON 字符串和 Java 對(duì)象互轉(zhuǎn)
JSON 本質(zhì)上是一個(gè)字符串,通過(guò)文本來(lái)存儲(chǔ)和描述數(shù)據(jù)
Spring MVC 框架也集成了 JSON 的轉(zhuǎn)換工具,我們可以直接使用,來(lái)完成 JSON 字符串和 Java 對(duì)象的互轉(zhuǎn)
本質(zhì)上是 jackson-databind 提供的功能,Spring MVC 框架中已經(jīng)把該工具包引入了進(jìn)來(lái),我們可以直接進(jìn)行使用。如果脫離了 Spring MVC 使用,就需要引入相關(guān)依賴(lài)
<dependency>
<groupId>com.faster.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.13.5</version>
</dependency>JSON 的轉(zhuǎn)換工具包有很多,jackson-databind 只是其中一種
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
public class JSONUtils {
private static ObjectMapper objectMapper = new ObjectMapper();
public static void main(String[] args) throws JsonProcessingException {
Person person = new Person();
person.setId(4444);
person.setName("Yechiel");
person.setPassword("3018");
//對(duì)象轉(zhuǎn)為 JSON 字符串
String jsonStr = objectMapper.writeValueAsString(person);
System.out.println(jsonStr);
//JSON 字符串轉(zhuǎn)為對(duì)象
Person p = objectMapper.readValue(jsonStr,Person.class);
System.out.println("轉(zhuǎn)換的對(duì)象id: "+p.getId()+", name: "+
p.getName()+", password: "+p.getPassword());
}
}- 使用
ObjectMapper對(duì)象提供的兩個(gè)方法,可以完成對(duì)象和 JSON 字符串的互轉(zhuǎn) writeValueAsString:把對(duì)象轉(zhuǎn)換為 JSON 字符串readValue:把 JSON 字符串轉(zhuǎn)換為對(duì)象
JSON 優(yōu)點(diǎn)
- 簡(jiǎn)單易用:語(yǔ)法簡(jiǎn)單,易于理解和編寫(xiě),可以快速地進(jìn)行數(shù)據(jù)交換
- 跨平臺(tái)支持:JSON 可以被多種編程語(yǔ)言解析和生成,可以在不同的平臺(tái)和語(yǔ)言之間進(jìn)行數(shù)據(jù)交換和傳輸
- 輕量級(jí):相較于 XML 格式,JSON 數(shù)據(jù)格式更加輕量級(jí),傳輸數(shù)據(jù)時(shí)占用帶寬較小,可以提高數(shù)據(jù)傳輸速度
- 易于擴(kuò)展:JSON 的數(shù)據(jù)結(jié)構(gòu)靈活,支持嵌套對(duì)象和數(shù)組等復(fù)雜的數(shù)據(jù)結(jié)構(gòu),便于擴(kuò)展和使用
- 安全性:JSON 數(shù)據(jù)格式是一種純文本格式,不包含可執(zhí)行代碼,不會(huì)執(zhí)行惡意代碼,因此具有較高的安全性
基于以上特點(diǎn),JSON 在 Web 應(yīng)用程序中被廣泛使用,如前后端交互,API 接口數(shù)據(jù)傳輸?shù)?/p>
傳遞 JSON 對(duì)象
接收 JSON 對(duì)象,需要使用 @RequestBody 注解
RequestBody:請(qǐng)求正文,意思是這個(gè)注解作用在請(qǐng)求正文的數(shù)據(jù)綁定,請(qǐng)求參數(shù)必須寫(xiě)在正文中
后端實(shí)現(xiàn):
@RequestMapping("/m8")
public Object method8(@RequestBody Person person){
return person.toString();
}
}使用 Postman 來(lái)發(fā)送 JSON 請(qǐng)求:

可以看到,后端正確接收了,通過(guò) Fiddler 觀察一下請(qǐng)求參數(shù)

嘗試去掉 @RequestBody 試試
@RequestMapping("/m9")
public Object method9(Person person){
return person.toString();
}請(qǐng)求響應(yīng)結(jié)果如下:

后端未能成功給 Person 對(duì)象賦值
到此這篇關(guān)于Spring 請(qǐng)求之傳遞 JSON 數(shù)據(jù)的文章就介紹到這了,更多相關(guān)Spring 請(qǐng)求傳遞 JSON 數(shù)據(jù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- SpringBoot通過(guò)JSON傳遞請(qǐng)求參數(shù)的實(shí)例詳解
- Spring?請(qǐng)求之傳遞?JSON?數(shù)據(jù)的操作方法
- Spring MVC請(qǐng)求參數(shù)的傳遞方式
- Spring請(qǐng)求傳遞參數(shù)的解決方案
- SpringBoot請(qǐng)求參數(shù)傳遞與接收說(shuō)明小結(jié)
- SpringBoot用實(shí)體接收Get請(qǐng)求傳遞過(guò)來(lái)的多個(gè)參數(shù)的兩種方式
- SpringMVC 跨重定向請(qǐng)求傳遞數(shù)據(jù)的方法實(shí)現(xiàn)
相關(guān)文章
Springboot2.0配置JPA多數(shù)據(jù)源連接兩個(gè)mysql數(shù)據(jù)庫(kù)方式
這篇文章主要介紹了Springboot2.0配置JPA多數(shù)據(jù)源連接兩個(gè)mysql數(shù)據(jù)庫(kù)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-09-09
java.lang.NoSuchMethodException: com.sun.proxy.$Proxy58.list
這篇文章主要介紹了java.lang.NoSuchMethodException: com.sun.proxy.$Proxy58.list錯(cuò)誤解決辦法的相關(guān)資料,需要的朋友可以參考下2016-12-12
Java 的 FileFilter文件過(guò)濾與readline讀行操作實(shí)例代碼
這篇文章介紹了Java 的 FileFilter文件過(guò)濾與readline讀行操作實(shí)例代碼,有需要的朋友可以參考一下2013-09-09
MyBatisPlus中@TableField注解的基本使用
這篇文章主要介紹了MyBatisPlus中@TableField注解的基本使用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-07-07
Spring實(shí)現(xiàn)擁有者權(quán)限驗(yàn)證的方法示例
這篇文章主要介紹了Spring實(shí)現(xiàn)擁有者權(quán)限驗(yàn)證的方法示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-03-03
java?Stream流常見(jiàn)操作方法(反射,類(lèi)加載器,類(lèi)加載,反射)
這篇文章主要介紹了java?Stream流常見(jiàn)操作方法(反射,類(lèi)加載器,類(lèi)加載,反射),文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定參考價(jià)值,感興趣的小伙伴可以參考一下2022-06-06
SSM項(xiàng)目的web.xml的DispatcherServlet爆紅原因及解決方案
文章說(shuō)明在Web項(xiàng)目配置中,web.xml中DispatcherServlet報(bào)紅可能因路徑錯(cuò)誤或依賴(lài)版本問(wèn)題,需手動(dòng)調(diào)整路徑并修改SpringMVC依賴(lài)版本為5.3.18,以解決依賴(lài)沖突和配置問(wèn)題2025-08-08

