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

SpringMVC集成FastJson使用流程詳解

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

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

1.什么是json

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

2.Json數(shù)組格式

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

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

3.Json對象格式

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

var jsonObject = {"k1":"v1","k2":"v2","k3":"v3"}; //定義對象格式json
console.log(jsonObject.k1); //取出鍵k1對應的值

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

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

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

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

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

③:你中有我,我中有你

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

二、FastJson介紹

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

Fastjson 的優(yōu)點

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

三、FastJson序列化API

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

JSON.toJSONString

序列化Java對象

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對象

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ù)上.可在序列化和反序列化時進行特性功能定制.

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

七、@ JSonType注解

該注解作用于類上,對該類的字段進行序列化和反序列化時的特性功能定制.

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

八、SpringMVC集成 FastJson

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

環(huán)境搭建

  • 創(chuàng)建Web項目
  • 導入相關的依賴jar包
	<!-- FastJson -->
   <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>fastjson</artifactId>
      <version>1.2.62</version>
    </dependency>
    <!-- 數(shù)據(jù)庫驅(qū)動 -->
    <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>

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

相關文章

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

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

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

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

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

    Java SpringBoot+vue+實戰(zhàn)項目詳解

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

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

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

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

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

    JAVA 線程通信相關知識匯總

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

    Spring Cloud LoadBalancer 負載均衡詳解

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

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

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

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

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

    java自定義異常以及throw和throws關鍵字用法

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

最新評論

涿鹿县| 南康市| 营口市| 九龙坡区| 永安市| 麻城市| 温州市| 柳河县| 洛扎县| 南阳市| 香格里拉县| 临高县| 宁城县| 集安市| 兰溪市| 改则县| 双鸭山市| 华坪县| 山阴县| 托克托县| 交城县| 五常市| 宣城市| 廊坊市| 房产| 昭觉县| 伊川县| 方正县| 泽州县| 周至县| 金坛市| 凤山市| 金沙县| 沙洋县| 阳高县| 饶平县| 格尔木市| 华坪县| 旅游| 娄底市| 叙永县|