JavaWeb中使用JSON

前言: 最近也是期末了,有好多好多文檔和實(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ū)別:

  1. 使用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>
  1. 使用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è)置了 dataTypecontentType 來(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ù)介紹

引用自:幾種常用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í)資料

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容