
前言: 最近也是期末了,有好多好多文檔和實(shí)驗(yàn)報(bào)告要交,所以都沒(méi)啥時(shí)間寫文,這段時(shí)間清閑了,來(lái)補(bǔ)一下之前學(xué)習(xí)時(shí)遺漏的一些知識(shí)樹(shù),話說(shuō)就沒(méi)人吐槽這個(gè)JSON圖標(biāo)好丑嗎?
什么是JSON
- JSON 指的是 JavaScript 對(duì)象表示法(JavaScript Object Notation)
- JSON 是輕量級(jí)的文本數(shù)據(jù)交換格式
- JSON 獨(dú)立于語(yǔ)言
* - JSON 具有自我描述性,更易理解
JSON 使用 JavaScript 語(yǔ)法來(lái)描述數(shù)據(jù)對(duì)象,但是 JSON 仍然獨(dú)立于語(yǔ)言和平臺(tái)。JSON 解析器和 JSON 庫(kù)支持許多不同的編程語(yǔ)言。
這里有意思的是,JSON本來(lái)是用來(lái)表示 JavaScript 對(duì)象的一種數(shù)據(jù)文本格式,但由于它輕量級(jí)、易于解析/操作(JavaScript原生支持)的一些特點(diǎn),漸漸的被很多語(yǔ)言支持也就成了一種標(biāo)準(zhǔn)
為什么使用JSON
在JSON之前,我們通常在網(wǎng)絡(luò)傳輸中使用的格式是XML,在我們的印象之中,XML具有很好的可讀性,并且格式統(tǒng)一,解析起來(lái)也相對(duì)比較簡(jiǎn)單,為什么摒棄掉XML而逐漸的使用起JSON呢?
主要原因在于:JSON比XML更小、更快、更易解析。
- JavaScript原生支持JSON,解析速度相較XML會(huì)更快;
- XML解析成DOM對(duì)象的時(shí)候,瀏覽器之間會(huì)產(chǎn)生差異【例如IE和FireFox】;
- JSON有很多強(qiáng)大的庫(kù)能夠幫助我們更快更簡(jiǎn)單的完成工作
XML與JSON實(shí)例比較
接下來(lái)我們通過(guò)一個(gè)實(shí)例的比較來(lái)真實(shí)的說(shuō)明一下XML與JSON的區(qū)別:
- 使用
XML表示中國(guó)部分省市的數(shù)據(jù)如下:
<?xml version="1.0" encoding="utf-8" ?>
<country>
<name>中國(guó)</name>
<province>
<name>黑龍江</name>
<citys>
<city>哈爾濱</city>
<city>大慶</city>
</citys>
</province>
<province>
<name>廣東</name>
<citys>
<city>廣州</city>
<city>深圳</city>
<city>珠海</city>
</citys>
</province>
<province>
<name>臺(tái)灣</name>
<citys>
<city>臺(tái)北</city>
<city>高雄</city>
</citys>
</province>
<province>
<name>新疆</name>
<citys>
<city>烏魯木齊</city>
</citys>
</province>
</country>
- 使用
JSON中國(guó)部分省市數(shù)據(jù)如下:
var country =
{
name: "中國(guó)",
provinces: [
{ name: "黑龍江", citys: { city: ["哈爾濱", "大慶"]} },
{ name: "廣東", citys: { city: ["廣州", "深圳", "珠海"]} },
{ name: "臺(tái)灣", citys: { city: ["臺(tái)北", "高雄"]} },
{ name: "新疆", citys: { city: ["烏魯木齊"]} }
]
}
從編碼的可讀性來(lái)說(shuō),
XML有明顯的優(yōu)勢(shì),畢竟人類的語(yǔ)言更貼近這樣的說(shuō)明結(jié)構(gòu)。而JSON讀起來(lái)更像是一個(gè)數(shù)據(jù)塊,讀起來(lái)比較費(fèi)解,不過(guò)我們讀起來(lái)費(fèi)解的語(yǔ)言,恰恰是適合機(jī)器于都的,所以通過(guò)JSON是的索引contry.provinces[0].name就可以讀取到“黑龍江”這個(gè)值從編碼的手寫難度來(lái)說(shuō),
XML還是更簡(jiǎn)單一些,好讀也就意味著好寫;不過(guò)JSON寫出來(lái)的字符明顯就少很多;去掉空白制表以及換行的話,JSON就是密密麻麻的有用數(shù)據(jù),而XML卻包含很多重復(fù)的標(biāo)記字符。
JSON相比XML的不同之處
- 沒(méi)有結(jié)束標(biāo)簽
- 更短
- 讀寫的速度更快
- 能夠使用內(nèi)建的 JavaScript eval() 方法進(jìn)行解析
- 使用數(shù)組
- 不使用保留字
對(duì)于AJAX應(yīng)用程序員來(lái)說(shuō),JSON比XML更快更易使用:
使用XML:
- 讀取XML文檔
- 使用XML DOM來(lái)循環(huán)遍歷文檔
- 讀取值并存儲(chǔ)在變量中
使用JSON:
- 讀取JSON字符串
- 用 eval() 處理JSON字符串
JSON語(yǔ)法
客戶端與服務(wù)器交換的數(shù)據(jù)無(wú)非就是兩種: 數(shù)組或者是對(duì)象,JSON所表示的數(shù)據(jù)也就是這兩種了
JSON語(yǔ)法是JavaScript語(yǔ)法的子集,在JavaScript中用[]中括號(hào)來(lái)表示數(shù)組,用{}大括號(hào)來(lái)表示對(duì)象,JSON也是這樣
JSON數(shù)組:
[]中括號(hào)里面的內(nèi)容有些像ArrayList,是一個(gè)列表一樣的東西
var employees = [
{ "firstName":"Bill" , "lastName":"Gates" },
{ "firstName":"George" , "lastName":"Bush" },
{ "firstName":"Thomas" , "lastName": "Carter" }
];
JSON對(duì)象:
{}大括號(hào)里面的東西有些像Map,是一對(duì)一對(duì)的鍵值對(duì)
var obj = {
age:20,
str:"wmyskxz",
method:function() {
alert("我愛(ài)學(xué)習(xí)");
}
};
-
注意:
[]中括號(hào)和{}大括號(hào)之間是可以相互嵌套的
解析JSON
在解析JSON對(duì)象之前,我們需要首先地來(lái)創(chuàng)造一個(gè)JSON對(duì)象:
<script>
var JASONObject = {"name": "我沒(méi)有三顆心臟", "age": 21};
</script>
使用HTML解析
在HTML中我們可以直接使用.點(diǎn)號(hào)來(lái)直接訪問(wèn)JSON對(duì)象的屬性:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>JSON學(xué)習(xí)</title>
</head>
<body>
<p>
Name:<span id="name"></span><br>
Age:<span id="age"></span><br>
</p>
<script>
var JASONObject = {"name": "我沒(méi)有三顆心臟", "age": 21};
document.getElementById("name").innerHTML = JASONObject.name;
document.getElementById("age").innerHTML = JASONObject.age;
</script>
</body>
</html>
打開(kāi)網(wǎng)頁(yè)我們能正確看到如下效果:

但通常情況中,我們拿到和上傳的并不是一個(gè)真正的JSON對(duì)象,而是一串由JSON轉(zhuǎn)換得來(lái)的字符串,我們同樣在HTML中模擬解析一下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>JSON學(xué)習(xí)</title>
</head>
<body>
<p>
Name:<span id="name"></span><br>
Age:<span id="age"></span><br>
</p>
<script>
var txt = '{"students":[' +
'{"name":"我沒(méi)有三顆心臟0","age":21},' +
'{"name":"我沒(méi)有三顆心臟1","age":21 }]}';
var obj = eval("(" + txt + ")");
document.getElementById("name").innerHTML = obj.students[1].name;
document.getElementById("age").innerHTML = obj.students[1].age;
</script>
</body>
</html>
打開(kāi)網(wǎng)頁(yè)即可看到如下正確效果:

從前端發(fā)送JSON數(shù)據(jù)到后臺(tái)
我們這里演示使用AJAX請(qǐng)求的方式來(lái)提交JSON數(shù)據(jù)到后臺(tái):
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>JSON學(xué)習(xí)</title>
<!-- 因?yàn)椴幌胧謩?dòng)引感覺(jué)挺麻煩,引了個(gè)菜鳥(niǎo)教程的 -->
<script src="http://cdn.static.runoob.com/libs/jquery/1.10.2/jquery.min.js"></script>
</head>
<body>
<form>
id:<input type="text" id="id" value="123"/><br/>
名稱:<input type="text" id="name" value="category xxx"/><br/>
<input type="button" value="提交" id="sender">
</form>
<div id="messageDiv"></div>
<script>
$('#sender').click(function () {
var id = document.getElementById('id').value;
var name = document.getElementById('name').value;
var category = {"name": name, "id": id};
var jsonData = JSON.stringify(category);
var page = "category";
$.ajax({
type: "put",
url: page,
data: jsonData,
dataType: "json",
contentType: "application/json;charset=UTF-8",
success: function (result) {
}
});
alert("提交成功,請(qǐng)?jiān)趕pringboot控制臺(tái)查看服務(wù)端接收到的數(shù)據(jù)");
});
</script>
</body>
</html>
-
注意: 在上面的例子中,我們使用了
JSON.stringify()來(lái)將一個(gè)JSON對(duì)象轉(zhuǎn)換成了一串字符串,并且在AJAX中,我們?cè)O(shè)置了dataType和contentType來(lái)告知后臺(tái)我們傳輸?shù)氖且粋€(gè)JSON數(shù)據(jù)
簡(jiǎn)單寫一個(gè)Controller來(lái)驗(yàn)證一下吧:
@PutMapping("/category")
public void addCategory(@RequestBody Category category) throws Exception {
System.out.println("springboot接受到瀏覽器以JSON格式提交的數(shù)據(jù):" + category.getId() + category.getName());
}
-----------控制臺(tái)打印信息:----------
springboot接受到瀏覽器以JSON格式提交的數(shù)據(jù):123 category xxx
- @RequestBody 注解后面講到,這里只做簡(jiǎn)單演示
JSON庫(kù)介紹
在后臺(tái)有許多支持解析JSON的庫(kù),目前對(duì)于Java開(kāi)源的JSON類庫(kù)有許多,下面我們介紹三種比較常用的JSON庫(kù),并進(jìn)行比對(duì)說(shuō)明,它們分別是:
-
Gson(項(xiàng)目地址:https://github.com/google/gson)
- Gson是目前功能最全的Json解析神器,Gson當(dāng)初是為因應(yīng)Google公司內(nèi)部需求而由Google自行研發(fā)而來(lái),但自從在2008年五月公開(kāi)發(fā)布第一版后已被許多公司或用戶應(yīng)用。Gson的應(yīng)用主要為toJson與fromJson兩個(gè)轉(zhuǎn)換函數(shù),無(wú)依賴,不需要例外額外的jar,能夠直接跑在JDK上。而在使用這種對(duì)象轉(zhuǎn)換之前需先創(chuàng)建好對(duì)象的類型以及其成員才能成功的將JSON字符串成功轉(zhuǎn)換成相對(duì)應(yīng)的對(duì)象。類里面只要有g(shù)et和set方法,Gson完全可以將復(fù)雜類型的json到bean或bean到j(luò)son的轉(zhuǎn)換,是JSON解析的神器。
-
FastJson(項(xiàng)目地址:https://github.com/alibaba/fastjson)
- Fastjson是一個(gè)Java語(yǔ)言編寫的高性能的JSON處理器,由阿里巴巴公司開(kāi)發(fā)。無(wú)依賴,不需要例外額外的jar,能夠直接跑在JDK上。FastJson在復(fù)雜類型的Bean轉(zhuǎn)換Json上會(huì)出現(xiàn)一些問(wèn)題,可能會(huì)出現(xiàn)引用的類型,導(dǎo)致Json轉(zhuǎn)換出錯(cuò),需要制定引用。FastJson采用獨(dú)創(chuàng)的算法,將parse的速度提升到極致,超過(guò)所有json庫(kù)。
-
Jackson(項(xiàng)目地址:https://github.com/FasterXML/jackson)
- 相比json-lib框架,Jackson所依賴的jar包較少,簡(jiǎn)單易用并且性能也要相對(duì)高些。而且Jackson社區(qū)相對(duì)比較活躍,更新速度也比較快。Jackson對(duì)于復(fù)雜類型的json轉(zhuǎn)換bean會(huì)出現(xiàn)問(wèn)題,一些集合Map,List的轉(zhuǎn)換出現(xiàn)問(wèn)題。Jackson對(duì)于復(fù)雜類型的bean轉(zhuǎn)換Json,轉(zhuǎn)換的json格式不是標(biāo)準(zhǔn)的Json格式。
到底使用哪一個(gè)JSON庫(kù)呢?
我看了一些資料,比較印象深刻的是:FastJson在復(fù)雜類型的Bean轉(zhuǎn)換Json上會(huì)出現(xiàn)一些問(wèn)題,但是在解析JSON時(shí)卻是最快的(具體參考:知乎:fastjson這么快老外為啥還是熱衷 jackson?)
總結(jié)如下:
- FastJson的API設(shè)計(jì)的最簡(jiǎn)單,最方便使用,直接使用JSON的兩個(gè)靜態(tài)方法即可完成四種操作;而Gson和Jackson都需要new一個(gè)對(duì)象;
- 數(shù)據(jù)量大時(shí),使用Jackson;
- 如果有性能要求可以使用Gson/Jackson將bean轉(zhuǎn)換json確保數(shù)據(jù)的正確性,使用FastJson將Json轉(zhuǎn)換成Bean
三種JSON庫(kù)簡(jiǎn)要使用說(shuō)明
為了導(dǎo)庫(kù)簡(jiǎn)單,我在這里都使用Maven搭建的SpringBoot項(xiàng)目來(lái)演示,Maven庫(kù)的地址在這里:https://mvnrepository.com/
在使用之前,我們先來(lái)建設(shè)一些基礎(chǔ)類,用于支持JSON庫(kù)的使用:
public class Person {
private String name;
private Integer age;
/* getter and setter */
@Override
public String toString() {
return "名字為" + name + ",年齡" + age;
}
}
Gson庫(kù)使用簡(jiǎn)要說(shuō)明
(1)Maven依賴:
<!-- Gson庫(kù) -->
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.5</version>
</dependency>
(2)使用示例:
@Test
public void tester() {
Gson gson = new Gson();
/* —————————————————— 準(zhǔn)備測(cè)試數(shù)據(jù) —————————————————— */
Person person1 = new Person();
person1.setName("我沒(méi)有三顆心臟1");
person1.setAge(21);
Person person2 = new Person();
person2.setName("我沒(méi)有三顆心臟2");
person2.setAge(21);
Person person3 = new Person();
person3.setName("我沒(méi)有三顆心臟3");
person3.setAge(21);
List<Person> list = new ArrayList<>();
list.add(person1);
list.add(person2);
list.add(person3);
/* —————————————————— 簡(jiǎn)單的Bean轉(zhuǎn)為JSON —————————————————— */
String jsonString = gson.toJson(person1);
System.out.println("簡(jiǎn)單的Bean轉(zhuǎn)為JSON:" + jsonString);
/* —————————————————— JSON轉(zhuǎn)為簡(jiǎn)單Bean —————————————————— */
Person personFromJson = gson.fromJson(jsonString, Person.class);
System.out.println("JSON轉(zhuǎn)為簡(jiǎn)單Bean:" + personFromJson.toString());
/* —————————————————— 帶泛型的List轉(zhuǎn)JSON —————————————————— */
String jsonStringFromList = gson.toJson(list);
System.out.println("帶泛型的List轉(zhuǎn)JSON:" + jsonStringFromList);
/* —————————————————— JSONz轉(zhuǎn)為帶泛型的List —————————————————— */
List<Person> retList = gson.fromJson(jsonStringFromList, new TypeToken<List<Person>>() {
}.getType());
for (Person tempPerson : retList) {
System.out.println(tempPerson.toString());
}
}
------------------結(jié)果如下------------------
簡(jiǎn)單的Bean轉(zhuǎn)為JSON:{"name":"我沒(méi)有三顆心臟1","age":21}
JSON轉(zhuǎn)為簡(jiǎn)單Bean:名字為我沒(méi)有三顆心臟1,年齡21
帶泛型的List轉(zhuǎn)JSON:[{"name":"我沒(méi)有三顆心臟1","age":21},{"name":"我沒(méi)有三顆心臟2","age":21},{"name":"我沒(méi)有三顆心臟3","age":21}]
名字為我沒(méi)有三顆心臟1,年齡21
名字為我沒(méi)有三顆心臟2,年齡21
名字為我沒(méi)有三顆心臟3,年齡21
好文推薦及擴(kuò)展閱讀:你真的會(huì)用Gson嗎?Gson使用指南(一)
FastJson庫(kù)簡(jiǎn)要使用說(shuō)明
(1)Maven依賴:
<!-- FastJson庫(kù) -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.47</version>
</dependency>
(2)使用示例:
@Test
public void tester() {
/* —————————————————— 準(zhǔn)備測(cè)試數(shù)據(jù) —————————————————— */
Person person1 = new Person();
person1.setName("我沒(méi)有三顆心臟1");
person1.setAge(21);
Person person2 = new Person();
person2.setName("我沒(méi)有三顆心臟2");
person2.setAge(21);
Person person3 = new Person();
person3.setName("我沒(méi)有三顆心臟3");
person3.setAge(21);
List<Person> list = new ArrayList<>();
list.add(person1);
list.add(person2);
list.add(person3);
/* —————————————————— 簡(jiǎn)單的Bean轉(zhuǎn)為JSON —————————————————— */
String jsonString = JSON.toJSONString(person1);
System.out.println("簡(jiǎn)單的Bean轉(zhuǎn)為JSON:" + jsonString);
/* —————————————————— JSON轉(zhuǎn)為簡(jiǎn)單Bean —————————————————— */
Person personFromJson = JSON.parseObject(jsonString, Person.class);
System.out.println("JSON轉(zhuǎn)為簡(jiǎn)單Bean:" + personFromJson.toString());
/* —————————————————— 帶泛型的List轉(zhuǎn)JSON —————————————————— */
String jsonStringFromList = JSON.toJSONString(list);
System.out.println("帶泛型的List轉(zhuǎn)JSON:" + jsonStringFromList);
/* —————————————————— JSONz轉(zhuǎn)為帶泛型的List —————————————————— */
List<Person> retList = JSON.parseObject(jsonStringFromList, new TypeReference<List<Person>>() {
});
for (Person tempPerson : retList) {
System.out.println(tempPerson.toString());
}
}
------------------結(jié)果如下------------------
簡(jiǎn)單的Bean轉(zhuǎn)為JSON:{"age":21,"name":"我沒(méi)有三顆心臟1"}
JSON轉(zhuǎn)為簡(jiǎn)單Bean:名字為我沒(méi)有三顆心臟1,年齡21
帶泛型的List轉(zhuǎn)JSON:[{"age":21,"name":"我沒(méi)有三顆心臟1"},{"age":21,"name":"我沒(méi)有三顆心臟2"},{"age":21,"name":"我沒(méi)有三顆心臟3"}]
名字為我沒(méi)有三顆心臟1,年齡21
名字為我沒(méi)有三顆心臟2,年齡21
名字為我沒(méi)有三顆心臟3,年齡21
官方文檔:戳這里,據(jù)官方說(shuō)法,F(xiàn)astJson比Gson要快上6倍哦!
Jackson庫(kù)使用簡(jiǎn)要說(shuō)明
(1)Maven依賴:
稍微麻煩一點(diǎn)的是Jackson需要依賴三個(gè)包
<!-- jackson庫(kù) -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.5</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.9.5</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.9.5</version>
</dependency>
(2)使用示例:
@Test
public void tester() throws IOException {
/* —————————————————— 準(zhǔn)備測(cè)試數(shù)據(jù) —————————————————— */
Person person1 = new Person();
person1.setName("我沒(méi)有三顆心臟1");
person1.setAge(21);
Person person2 = new Person();
person2.setName("我沒(méi)有三顆心臟2");
person2.setAge(21);
Person person3 = new Person();
person3.setName("我沒(méi)有三顆心臟3");
person3.setAge(21);
List<Person> list = new ArrayList<>();
list.add(person1);
list.add(person2);
list.add(person3);
/* ObjectMapper是JSON操作的核心,Jackson的所有JSON操作都是在ObjectMapper中實(shí)現(xiàn)的 */
ObjectMapper mapper = new ObjectMapper();
/* —————————————————— 簡(jiǎn)單的Bean轉(zhuǎn)為JSON —————————————————— */
String jsonString = mapper.writeValueAsString(person1);
System.out.println("簡(jiǎn)單的Bean轉(zhuǎn)為JSON:" + jsonString);
/* —————————————————— JSON轉(zhuǎn)為簡(jiǎn)單Bean —————————————————— */
Person personFromJson = mapper.readValue(jsonString, Person.class);
System.out.println("JSON轉(zhuǎn)為簡(jiǎn)單Bean:" + personFromJson.toString());
/* —————————————————— 帶泛型的List轉(zhuǎn)JSON —————————————————— */
String jsonStringFromList = mapper.writeValueAsString(list);
System.out.println("帶泛型的List轉(zhuǎn)JSON:" + jsonStringFromList);
/* —————————————————— JSONz轉(zhuǎn)為帶泛型的List —————————————————— */
// List<LinkedHashMap<String, Person>> retList = mapper.readValue(jsonStringFromList, List.class);
// for (int i = 0; i < retList.size(); i++) {
// Map<String, Person> map = retList.get(i);
// Set<String> set = map.keySet();
// for (Iterator<String> it = set.iterator(); it.hasNext();) {
// String key = it.next();
// System.out.println(key + ":" + map.get(key));
// }
// }
/* —————————————————— JSONz轉(zhuǎn)為Array數(shù)組 —————————————————— */
Person[] retList = mapper.readValue(jsonStringFromList, Person[].class);
for (int i = 0; i < retList.length; i++) {
System.out.println(retList[i].toString());
}
}
------------------結(jié)果如下------------------
簡(jiǎn)單的Bean轉(zhuǎn)為JSON:{"name":"我沒(méi)有三顆心臟1","age":21}
JSON轉(zhuǎn)為簡(jiǎn)單Bean:名字為我沒(méi)有三顆心臟1,年齡21
帶泛型的List轉(zhuǎn)JSON:[{"name":"我沒(méi)有三顆心臟1","age":21},{"name":"我沒(méi)有三顆心臟2","age":21},{"name":"我沒(méi)有三顆心臟3","age":21}]
名字為我沒(méi)有三顆心臟1,年齡21
名字為我沒(méi)有三顆心臟2,年齡21
名字為我沒(méi)有三顆心臟3,年齡21
-
幾點(diǎn)注意:
1.由于Jackson底層代碼拋出了IOEception,所以我們?cè)谡{(diào)用的時(shí)候也需要拋出;
2.Jackson所有的操作都是基于ObjectMapper
在框架中使用JSON
SpingMVC和SpringBoot一樣,都能通過(guò)注解的方式獲取并返回一串JSON格式的數(shù)據(jù),我們使用SpringBoot的一段實(shí)例程序來(lái)實(shí)際說(shuō)明一下:
@RequestMapping("/jsonCategory")
@ResponseBody // 該注解表示我們的請(qǐng)求不再交給springmvc處理,而是結(jié)合JSON包,將對(duì)象解析成JSON字符串
public Category jsonCategory() {
return new Category(123, "我沒(méi)有三顆心臟");
}
我們?cè)跒g覽器中訪問(wèn)地址:localhost:8080/jsonCategory,會(huì)得到以下JSON數(shù)據(jù):

我們也可以使用 @RequestBody 來(lái)獲取一串JSON數(shù)據(jù):
@PutMapping("/category")
public void addCategory(@RequestBody Category category) {
System.out.println("springboot接受到瀏覽器以JSON格式提交的數(shù)據(jù):" + category.getId() + category.getName());
}
我們?cè)谇芭_(tái)使用的是上面用過(guò)的用于提交JSON數(shù)據(jù)的頁(yè)面,運(yùn)行能夠成功得到結(jié)果:

-
注意: Spring4 之后新加入了
@RestController注解,是@ResponseBody和@Controller的組合注解,用于返回JSON數(shù)據(jù)。
歡迎轉(zhuǎn)載,轉(zhuǎn)載請(qǐng)注明出處!
簡(jiǎn)書ID:@我沒(méi)有三顆心臟
github:wmyskxz
歡迎關(guān)注公眾微信號(hào):wmyskxz_javaweb
分享自己的Java Web學(xué)習(xí)之路以及各種Java學(xué)習(xí)資料