最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringMVC集成FastJson使用流程詳解

 更新時(shí)間:2023年02月06日 11:12:01   作者:tanglin_030907031026  
如果你使用 Spring MVC 來(lái)構(gòu)建 Web 應(yīng)用并對(duì)性能有較高的要求的話,可以使用 Fastjson 提供的FastJsonHttpMessageConverter 來(lái)替換 Spring MVC 默認(rèn)的 HttpMessageConverter 以提高 @RestController @ResponseBody @RequestBody 注解的 JSON序列化速度

一、json數(shù)據(jù)格式回歸

1.什么是json

JSON:(JavaScript Object Notation, JS 對(duì)象簡(jiǎn)譜) 是一種輕量級(jí)的數(shù)據(jù)交換格式。它基于 ECMAScript(歐洲計(jì)算機(jī)協(xié)會(huì)制定的js規(guī)范)的一個(gè)子集,采用完全獨(dú)立于編程語(yǔ)言的文本格式來(lái)存儲(chǔ)和表示數(shù)據(jù)。簡(jiǎn)潔和清晰的層次結(jié)構(gòu)使得 JSON 成為理想的數(shù)據(jù)交換語(yǔ)言。 易于人閱讀和編寫,同時(shí)也易于機(jī)器解析和生成,并有效地提升網(wǎng)絡(luò)傳輸效率。目前,Json處于數(shù)據(jù)交換語(yǔ)言的王者地位.

2.Json數(shù)組格式

Json的數(shù)據(jù)本身是數(shù)組,中括號(hào)包裹,數(shù)組的元素之間逗號(hào)分開.數(shù)組元素的數(shù)據(jù)類型沒有限制.

var jsonArray = ["元素1","元素2","元素3"]; //定義數(shù)組格式j(luò)son
console.log(jsonArray[0]); //訪問json數(shù)組的元素
for(var i = 0 ; i < jsonArray.length ; i++){
    console.log(jsonArray[i]); //遍歷數(shù)組,訪問每個(gè)元素
}

3.Json對(duì)象格式

Json的數(shù)據(jù)本身是對(duì)象,大括號(hào)包裹.對(duì)象采用鍵值對(duì)形式存儲(chǔ),鍵固定為字符串類型,值是任意類型的數(shù)據(jù).鍵和值使用冒號(hào)分開.

var jsonObject = {"k1":"v1","k2":"v2","k3":"v3"}; //定義對(duì)象格式j(luò)son
console.log(jsonObject.k1); //取出鍵k1對(duì)應(yīng)的值

4.數(shù)組對(duì)象相互嵌套格式

①:數(shù)組中的元素是對(duì)象

var jsonArray = [
    {"k1":"v1"},{"k2":"v2"}
]; // 定義數(shù)組格式j(luò)son,數(shù)組元素是對(duì)象
console.log(jsonArray[0].k1); //訪問數(shù)組0索引的元素,該元素的鍵k1對(duì)應(yīng)的值

②:對(duì)象中的值是數(shù)組

var jsonObject = {
    "k1":["元素1","元素2"],
    "k2":["元素1","元素2"]
}; // 定義對(duì)象格式j(luò)son,鍵是字符串類型,值是數(shù)組
console.log(jsonObject.k1[0]); //訪問對(duì)象的鍵是k1,對(duì)于的值為數(shù)組,數(shù)組的0索引元素

③:你中有我,我中有你

var json = {
    "k1":[
      "元素1",{"key1":"value1"},{"key2":"value2"}  
    ],
    "k2":[
        {"key1":"value1"}
    ]
}; //定義對(duì)象格式j(luò)son,鍵是字符串,值是數(shù)組,數(shù)組的元素是對(duì)象
console.log(json.k1[1].key1); //訪問json對(duì)象的鍵k1,對(duì)應(yīng)的是數(shù)組,訪問數(shù)組的1索引,數(shù)組的1索引上的元素是對(duì)象,訪問key1鍵對(duì)應(yīng)的值

二、FastJson介紹

FastJson 是阿里巴巴的開源JSON解析庫(kù),它可以解析 JSON 格式的字符串,支持將 Java Bean 序列化為 JSON 字符串,也可以從 JSON 字符串反序列化到 JavaBean。

Fastjson 的優(yōu)點(diǎn)

  • 速度快 fastjson相對(duì)其他JSON庫(kù)的特點(diǎn)是快,從2011年fastjson發(fā)布1.1.x版本之后,其性能從未被其他Java實(shí)現(xiàn)的JSON庫(kù)超越。
  • 使用廣泛 fastjson在阿里巴巴大規(guī)模使用,在數(shù)萬(wàn)臺(tái)服務(wù)器上部署,fastjson在業(yè)界被廣泛接受。在2012年被開源中國(guó)評(píng)選為最受歡迎的國(guó)產(chǎn)開源軟件之一。
  • 測(cè)試完備 fastjson有非常多的testcase,在1.2.11版本中,testcase超過3321個(gè)。每次發(fā)布都會(huì)進(jìn)行回歸測(cè)試,保證質(zhì)量穩(wěn)定。
  • 使用簡(jiǎn)單 fastjson的 API 十分簡(jiǎn)潔。
  • 功能完備 支持泛型,支持流處理超大文本,支持枚舉,支持序列化和反序列化擴(kuò)展。

三、FastJson序列化API

序列化 : 是指將Java對(duì)象轉(zhuǎn)成json格式字符串的過程.JavaBean對(duì)象,List集合對(duì)象,Map集合,為應(yīng)用最廣泛的.

JSON.toJSONString

序列化Java對(duì)象

public void objectToJson(){
    Student student = new Student();
    student.setId(1);
    student.setName("張三");
    student.setAge(20);
    student.setAddress("北京市");
    student.setEmail("zs@sina.com");
    String jsonString = JSON.toJSONString(student);
    System.out.println(jsonString);
}

JSON.toJSONString

序列化List集合

public void listToJson(){
    Student student = new Student();
    student.setId(1);
    student.setName("張三");
    student.setAge(20);
    student.setAddress("北京市");
    student.setEmail("zs@sina.com");
    Student student2 = new Student();
    student2.setId(2);
    student2.setName("張三2");
    student2.setAge(22);
    student2.setAddress("北京市2");
    student2.setEmail("zs2@sina.com");
    List<Student> list = new ArrayList<Student>();
    list.add(student);
    list.add(student2);
    String jsonString = JSON.toJSONString(list);
    System.out.println(jsonString);
}

JSON.toJSONString

序列化Map集合

public void mapToJson(){
    Student student = new Student();
    student.setId(1);
    student.setName("張三");
    student.setAge(20);
    student.setAddress("北京市");
    student.setEmail("zs@sina.com");
    Student student2 = new Student();
    student2.setId(2);
    student2.setName("張三2");
    student2.setAge(22);
    student2.setAddress("北京市2");
    student2.setEmail("zs2@sina.com");
    Map<String,Student> map = new HashMap<String, Student>();
    map.put("s1",student);
    map.put("s2",student2);
    String jsonString = JSON.toJSONString(map);
    System.out.println(jsonString);
}

四、FashJson反序列化API

JSON.parseObject

反序列化Java對(duì)象

public void jsonToObject(){
    String jsonString = "{\"address\":\"北京市\(zhòng)",\"age\":20,\"email\":\"zs@sina.com\",\"id\":1,\"name\":\"張三\"}";
    Student student = JSON.parseObject(jsonString, Student.class);
    System.out.println(student);
}

JSON.parseArray

反序列化List集合

public void jsonToList(){
    String jsonString = "[{\"address\":\"北京市\(zhòng)",\"age\":20,\"email\":\"zs@sina.com\",\"id\":1,\"name\":\"張三\"},{\"address\":\"北京市2\",\"age\":22,\"email\":\"zs2@sina.com\",\"id\":2,\"name\":\"張三2\"}]";
    List<Student> list = JSON.parseArray(jsonString,Student.class);
    for (int i = 0; i < list.size(); i++) {
        Student student =  list.get(i);
        System.out.println(student);
    }
}

JSON.parseObject

反序列化Map集合

public void jsonToMap(){
    String jsonString = "{\"s1\":{\"address\":\"北京市\(zhòng)",\"age\":20,\"email\":\"zs@sina.com\",\"id\":1,\"name\":\"張三\"},\"s2\":{\"address\":\"北京市2\",\"age\":22,\"email\":\"zs2@sina.com\",\"id\":2,\"name\":\"張三2\"}}";
    Map<String,Student> parse = JSON.parseObject(jsonString,new TypeReference<Map<String,Student>>(){});
    for(String s : parse.keySet()){
    	System.out.println(s + ":::"+parse.get(s));
    }
}

五、SerializerFeature枚舉

該枚舉支持序列化的一些特性數(shù)據(jù)定義.

枚舉常量 WriteMapNullValue 序列化為null的字段

public void testSerializerFeature(){
    Student student = new Student();
    student.setId(1);
    student.setName("張三");
    student.setAge(20);
    //student.setAddress("北京市");
    student.setEmail("zs@sina.com");
    String jsonString = JSON.toJSONString(student, SerializerFeature.WriteMapNullValue);
    System.out.println(jsonString);
}

枚舉常量 WriteNullStringAsEmpty 字段為null,序列化為""

public void testSerializerFeature(){
    Student student = new Student();
    student.setId(1);
    student.setName("張三");
    student.setAge(20);
    //student.setAddress("北京市");
    student.setEmail("zs@sina.com");
    String jsonString = JSON.toJSONString(student, SerializerFeature.WriteNullStringAsEmpty);
    System.out.println(jsonString);
}

枚舉常量 WriteNullNumberAsZero 字段為null,序列化為0

public void testSerializerFeature(){
    Student student = new Student();
    student.setId(1);
    student.setName("張三");
    //student.setAge(20);
    student.setAddress("北京市");
    student.setEmail("zs@sina.com");
    String jsonString = JSON.toJSONString(student, SerializerFeature.WriteNullNumberAsZero);
    System.out.println(jsonString);
}
  • 枚舉常量 WriteNullBooleanAsFalse 字段值為null 輸出false
  • 枚舉常量 WriteDateUseDateFormat 格式化日期格式
  • 枚舉常量 PrettyFormat格式化輸出
public void testSerializerFeature2(){
    Person person = new Person();
    //person.setFlag(true);
    person.setDate(new Date());
    String jsonString = JSON.toJSONString(person,SerializerFeature.WriteNullBooleanAsFalse,
  SerializerFeature.WriteDateUseDateFormat,SerializerFeature.PrettyFormat);
    System.out.println(jsonString);
}

六、@JSonField注解

該注解作用于方法上,字段上和參數(shù)上.可在序列化和反序列化時(shí)進(jìn)行特性功能定制.

  • 注解屬性 : name 序列化后的名字
  • 注解屬性 : ordinal序列化后的順序
  • 注解屬性 : format 序列化后的格式
  • 注解屬性 : serialize 是否序列化該字段
  • 注解屬性 : deserialize 是否反序列化該字段
  • 注解屬性 : serialzeFeatures 序列化時(shí)的特性定義

七、@ JSonType注解

該注解作用于類上,對(duì)該類的字段進(jìn)行序列化和反序列化時(shí)的特性功能定制.

  • 注解屬性 : includes 要被序列化的字段.
  • 注解屬性 : orders 序列化后的順序.
  • 注解屬性 : serialzeFeatures 序列化時(shí)的特性定義.

八、SpringMVC集成 FastJson

SpringMVC框架中,默認(rèn)使用的json序列化工具是jackson,我們需要在SpringMVM的配置文件中,配置消息轉(zhuǎn)換器,由jackson切換到FastJson.

環(huán)境搭建

  • 創(chuàng)建Web項(xiàng)目
  • 導(dǎo)入相關(guān)的依賴jar包
	<!-- FastJson -->
   <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>fastjson</artifactId>
      <version>1.2.62</version>
    </dependency>
    <!-- 數(shù)據(jù)庫(kù)驅(qū)動(dòng) -->
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.1.46</version>
    </dependency>
    <!-- spring框架 -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>5.0.2.RELEASE</version>
    </dependency>
	<!--  springMVC -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>5.0.2.RELEASE</version>
    </dependency>
    <!--  spring jdbctemplate -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-jdbc</artifactId>
      <version>5.0.2.RELEASE</version>
    </dependency>
	<!-- 德魯伊連接池 -->
    <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>druid</artifactId>
      <version>1.1.10</version>
    </dependency>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
      <version>1.18.8</version>
    </dependency>
  </dependencies>

配置springmvc.xml

<mvc:annotation-driven> 
    <mvc:message-converters register-defaults="false">
        <!-- FastJson的消息轉(zhuǎn)換器-->
        <bean id = "fastJson" class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter">
            <!-- FastJsonHttpMessageConverter類屬性賦值-->
            <property name="supportedMediaTypes">
                <list>
                    <value>application/json;charset=UTF-8</value>
                </list>
            </property>
        </bean>
    </mvc:message-converters>
</mvc:annotation-driven>

到此這篇關(guān)于SpringMVC集成FastJson使用流程詳解的文章就介紹到這了,更多相關(guān)SpringMVC集成FastJson內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Spring?Boot自定義監(jiān)控指標(biāo)的詳細(xì)過程

    Spring?Boot自定義監(jiān)控指標(biāo)的詳細(xì)過程

    這篇文章主要介紹了Spring?Boot如何自定義監(jiān)控指標(biāo)?,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-03-03
  • SpringBoot整合MongoDB實(shí)現(xiàn)文件上傳下載刪除

    SpringBoot整合MongoDB實(shí)現(xiàn)文件上傳下載刪除

    這篇文章主要介紹了SpringBoot整合MongoDB實(shí)現(xiàn)文件上傳下載刪除的方法,幫助大家更好的理解和學(xué)習(xí)使用SpringBoot框架,感興趣的朋友可以了解下
    2021-05-05
  • Java SpringBoot+vue+實(shí)戰(zhàn)項(xiàng)目詳解

    Java SpringBoot+vue+實(shí)戰(zhàn)項(xiàng)目詳解

    這篇文章主要介紹了SpringBoot+VUE實(shí)現(xiàn)前后端分離的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-09-09
  • 源碼解析Spring 數(shù)據(jù)庫(kù)異常抽理知識(shí)點(diǎn)總結(jié)

    源碼解析Spring 數(shù)據(jù)庫(kù)異常抽理知識(shí)點(diǎn)總結(jié)

    在本篇文章里小編給大家分享了關(guān)于源碼解析Spring 數(shù)據(jù)庫(kù)異常抽理知識(shí)點(diǎn)內(nèi)容,對(duì)此有需要的朋友們學(xué)習(xí)參考下。
    2019-05-05
  • Java實(shí)現(xiàn)調(diào)用MySQL存儲(chǔ)過程詳解

    Java實(shí)現(xiàn)調(diào)用MySQL存儲(chǔ)過程詳解

    相信大家都知道存儲(chǔ)過程是在大型數(shù)據(jù)庫(kù)系統(tǒng)中,一組為了完成特定功能的SQL語(yǔ)句集。存儲(chǔ)過程是數(shù)據(jù)庫(kù)中的一個(gè)重要對(duì)象,任何一個(gè)設(shè)計(jì)良好的數(shù)據(jù)庫(kù)應(yīng)用程序都應(yīng)該用到存儲(chǔ)過程。Java調(diào)用mysql存儲(chǔ)過程,實(shí)現(xiàn)如下,有需要的朋友們可以參考借鑒,下面來(lái)一起看看吧。
    2016-11-11
  • JAVA 線程通信相關(guān)知識(shí)匯總

    JAVA 線程通信相關(guān)知識(shí)匯總

    這篇文章主要介紹了JAVA 線程通信相關(guān)知識(shí),文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-06-06
  • Spring Cloud LoadBalancer 負(fù)載均衡詳解

    Spring Cloud LoadBalancer 負(fù)載均衡詳解

    本文介紹了如何在Spring Cloud中使用SpringCloudLoadBalancer實(shí)現(xiàn)客戶端負(fù)載均衡,并詳細(xì)講解了輪詢策略和隨機(jī)策略的配置方法,此外,還提供了部署到云服務(wù)器并在多個(gè)實(shí)例之間進(jìn)行負(fù)載均衡的步驟,感興趣的朋友一起看看吧
    2025-02-02
  • Java工廠模式優(yōu)雅地創(chuàng)建對(duì)象以及提高代碼復(fù)用率和靈活性

    Java工廠模式優(yōu)雅地創(chuàng)建對(duì)象以及提高代碼復(fù)用率和靈活性

    Java工廠模式是一種創(chuàng)建型設(shè)計(jì)模式,通過定義一個(gè)工廠類來(lái)封裝對(duì)象的創(chuàng)建過程,將對(duì)象的創(chuàng)建和使用分離,提高代碼的可維護(hù)性和可擴(kuò)展性,同時(shí)可以實(shí)現(xiàn)更好的代碼復(fù)用和靈活性
    2023-05-05
  • java實(shí)現(xiàn)隨機(jī)數(shù)生成器

    java實(shí)現(xiàn)隨機(jī)數(shù)生成器

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)隨機(jī)數(shù)生成器,隨機(jī)數(shù)生成小程序,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-12-12
  • java自定義異常以及throw和throws關(guān)鍵字用法

    java自定義異常以及throw和throws關(guān)鍵字用法

    這篇文章主要介紹了java自定義異常以及throw和throws關(guān)鍵字用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧
    2021-02-02

最新評(píng)論

吉安市| 报价| 枞阳县| 永城市| 利川市| 玛多县| 西贡区| 南宫市| 濮阳市| 礼泉县| 台北县| 麦盖提县| 辽源市| 称多县| 来安县| 江门市| 东乡| 含山县| 怀远县| 淮南市| 鹤峰县| 微博| 平舆县| 彝良县| 霍林郭勒市| 湄潭县| 石河子市| 龙口市| 塔河县| 会昌县| 潍坊市| 临湘市| 齐齐哈尔市| 江安县| 雷山县| 莱芜市| 定日县| 南充市| 吕梁市| 弋阳县| 星座|