欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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ǔ)言。 易于人閱讀和編寫(xiě),同時(shí)也易于機(jī)器解析和生成,并有效地提升網(wǎng)絡(luò)傳輸效率。目前,Json處于數(shù)據(jù)交換語(yǔ)言的王者地位.

2.Json數(shù)組格式

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

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

3.Json對(duì)象格式

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

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); //訪問(wèn)數(shù)組0索引的元素,該元素的鍵k1對(duì)應(yīng)的值

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

var jsonObject = {
    "k1":["元素1","元素2"],
    "k2":["元素1","元素2"]
}; // 定義對(duì)象格式j(luò)son,鍵是字符串類(lèi)型,值是數(shù)組
console.log(jsonObject.k1[0]); //訪問(wèn)對(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); //訪問(wèn)json對(duì)象的鍵k1,對(duì)應(yīng)的是數(shù)組,訪問(wèn)數(shù)組的1索引,數(shù)組的1索引上的元素是對(duì)象,訪問(wèn)key1鍵對(duì)應(yīng)的值

二、FastJson介紹

FastJson 是阿里巴巴的開(kāi)源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年被開(kāi)源中國(guó)評(píng)選為最受歡迎的國(guó)產(chǎn)開(kāi)源軟件之一。
  • 測(cè)試完備 fastjson有非常多的testcase,在1.2.11版本中,testcase超過(guò)3321個(gè)。每次發(fā)布都會(huì)進(jìn)行回歸測(cè)試,保證質(zhì)量穩(wěn)定。
  • 使用簡(jiǎn)單 fastjson的 API 十分簡(jiǎn)潔。
  • 功能完備 支持泛型,支持流處理超大文本,支持枚舉,支持序列化和反序列化擴(kuò)展。

三、FastJson序列化API

序列化 : 是指將Java對(duì)象轉(zhuǎn)成json格式字符串的過(guò)程.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注解

該注解作用于類(lèi)上,對(duì)該類(lèi)的字段進(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)的依賴(lài)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類(lèi)屬性賦值-->
            <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)文章

  • 解析iReport自定義行數(shù)分頁(yè)的操作方法

    解析iReport自定義行數(shù)分頁(yè)的操作方法

    ireport默認(rèn)都是自動(dòng)分頁(yè)數(shù)據(jù)超出頁(yè)面長(zhǎng)度就會(huì)自動(dòng)分到下一頁(yè),但有時(shí)候業(yè)務(wù)需要一頁(yè)只顯示固定幾行這時(shí)候就需要自定義條數(shù)了。下面看具體操作吧
    2021-10-10
  • log4j的使用詳細(xì)解析

    log4j的使用詳細(xì)解析

    最近在整理公司產(chǎn)品的日志輸出規(guī)范,涉及l(fā)og4j的使用介紹,就簡(jiǎn)單整理了一下。需要的朋友可以過(guò)來(lái)參考參考
    2013-08-08
  • JAVA中Object的常用方法

    JAVA中Object的常用方法

    JAVA中Object是所有對(duì)象的頂級(jí)父類(lèi),存在于java.lang包中,這個(gè)包不需要我們手動(dòng)導(dǎo)包,本文通過(guò)實(shí)例代碼介紹JAVA中Object的常用方法,感興趣的朋友一起看看吧
    2023-11-11
  • Spring中如何使用Comparator接口

    Spring中如何使用Comparator接口

    Comparator比較器接口可以將自身傳遞給排序方法(比如Collections.sort或Arrays.sort),以便對(duì)排序順序進(jìn)行精確控制。本文講述Spring中如何使用Comparator接口
    2021-06-06
  • Java實(shí)現(xiàn)七牛云文件圖片上傳下載

    Java實(shí)現(xiàn)七牛云文件圖片上傳下載

    本文主要介紹了Java實(shí)現(xiàn)七牛云文件圖片上傳下載,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • 解析Java虛擬機(jī)中類(lèi)的初始化及加載器的父委托機(jī)制

    解析Java虛擬機(jī)中類(lèi)的初始化及加載器的父委托機(jī)制

    這篇文章主要介紹了Java虛擬機(jī)中類(lèi)的初始化及加載器的父委托機(jī)制,包括命名空間等深層次的知識(shí)點(diǎn)講解,需要的朋友可以參考下
    2015-11-11
  • SpringBoot集成Dubbo啟用gRPC協(xié)議

    SpringBoot集成Dubbo啟用gRPC協(xié)議

    這篇文章主要介紹了SpringBoot集成Dubbo啟用gRPC協(xié)議,以及與原生 gRPC 在代碼編寫(xiě)過(guò)程中的區(qū)別。感興趣的同學(xué)可以參考閱讀
    2023-04-04
  • MyBatis多數(shù)據(jù)源的兩種配置方式

    MyBatis多數(shù)據(jù)源的兩種配置方式

    這篇文章主要給大家介紹了關(guān)于MyBatis多數(shù)據(jù)源的兩種配置方式,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2018-12-12
  • java?實(shí)現(xiàn)獲取指定位置后的第一個(gè)數(shù)字

    java?實(shí)現(xiàn)獲取指定位置后的第一個(gè)數(shù)字

    這篇文章主要介紹了java?實(shí)現(xiàn)獲取指定位置后的第一個(gè)數(shù)字,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • java 中冒泡、二分、快速算法詳解

    java 中冒泡、二分、快速算法詳解

    這篇文章主要介紹了java 中冒泡、二分、快速算法詳解的相關(guān)資料,需要的朋友可以參考下
    2017-06-06

最新評(píng)論