Spring請求如何傳遞 JSON 數(shù)據(jù)
JSON 概念
JSON:JavaScript Object Notation【JavaScript 對象表示法】
JSON 就是一種數(shù)據(jù)格式,有自己的格式和語法,使用文本表示一個對象或數(shù)組的信息,因此 JSON 本質是字符串,主要負責在不同的語言中數(shù)據(jù)傳遞和交換
類似于:
- 國際通用語言——英語
- 中國 56 個民族不同地區(qū)的通用語言——普通話
有自己的語法,其他語言也認識
JSON 和 JavaScript 沒有關系,只是語法類似,JavaScript 開發(fā)者能更快的上手而已,但是他的語法本身比較簡單,所以也很好學
JSON 語法
JSON 是一個字符串,其格式非常類似于 JavaScript 對象字面量的格式。我們先來看一段 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ù)一樣,只不過上面進行了格式化,更易讀
JSON 的語法
- 數(shù)據(jù)在鍵值對(
Key/Value)中 - 數(shù)據(jù)由
,分隔 - 對象用
{}表示 - 數(shù)組用
[]表示 - 值可以為對象,也可以為數(shù)組,數(shù)組中可以包含多個對象
JSON 的兩種結構
- 對象:大括號
{}保存的對象是一個無序的鍵值對集合。一個對象以左括號{開始,右括號}結束。每個“鍵”后跟一個冒號:,鍵值對使用逗號,分隔 - 數(shù)組:中括號
[]保存的數(shù)組是值(value)的有序集合。一個數(shù)組以左中括號[開始,右中括號]結束。值之間使用,分隔

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

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

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

- 后端未能成功給
Person對象賦值
到此這篇關于Spring請求如何傳遞 JSON 數(shù)據(jù)的文章就介紹到這了,更多相關spring 傳遞 json 數(shù)據(jù)內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
- Spring?請求之傳遞?JSON?數(shù)據(jù)的操作方法
- SpringBoot通過JSON傳遞請求參數(shù)的實例詳解
- Spring Controller接收前端JSON數(shù)據(jù)請求方式
- Springboot接收POST請求,數(shù)據(jù)為json類型問題
- Springmvc處理ajax請求并返回json數(shù)據(jù)
- Spring boot如何配置請求的入?yún)⒑统鰠son數(shù)據(jù)格式
- SpringMVC解析JSON請求數(shù)據(jù)問題解析
- Spring4.0 MVC請求json數(shù)據(jù)報406錯誤的解決方法
- SpringMVC環(huán)境下實現(xiàn)的Ajax異步請求JSON格式數(shù)據(jù)
相關文章
Maven中錯誤使用parent.relativePath導致構建失敗問題
這篇文章主要介紹了Maven中錯誤使用parent.relativePath導致構建失敗問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-08-08

