SpringMVC集成FastJson使用流程詳解
一、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默認(rèn)都是自動(dòng)分頁(yè)數(shù)據(jù)超出頁(yè)面長(zhǎng)度就會(huì)自動(dòng)分到下一頁(yè),但有時(shí)候業(yè)務(wù)需要一頁(yè)只顯示固定幾行這時(shí)候就需要自定義條數(shù)了。下面看具體操作吧2021-10-10解析Java虛擬機(jī)中類(lèi)的初始化及加載器的父委托機(jī)制
這篇文章主要介紹了Java虛擬機(jī)中類(lèi)的初始化及加載器的父委托機(jī)制,包括命名空間等深層次的知識(shí)點(diǎn)講解,需要的朋友可以參考下2015-11-11SpringBoot集成Dubbo啟用gRPC協(xié)議
這篇文章主要介紹了SpringBoot集成Dubbo啟用gRPC協(xié)議,以及與原生 gRPC 在代碼編寫(xiě)過(guò)程中的區(qū)別。感興趣的同學(xué)可以參考閱讀2023-04-04java?實(shí)現(xiàn)獲取指定位置后的第一個(gè)數(shù)字
這篇文章主要介紹了java?實(shí)現(xiàn)獲取指定位置后的第一個(gè)數(shù)字,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-01-01