SpringMVC集成FastJson使用流程詳解
一、json數(shù)據(jù)格式回歸
1.什么是json
JSON:(JavaScript Object Notation, JS 對象簡譜) 是一種輕量級的數(shù)據(jù)交換格式。它基于 ECMAScript(歐洲計(jì)算機(jī)協(xié)會制定的js規(guī)范)的一個子集,采用完全獨(dú)立于編程語言的文本格式來存儲和表示數(shù)據(jù)。簡潔和清晰的層次結(jié)構(gòu)使得 JSON 成為理想的數(shù)據(jù)交換語言。 易于人閱讀和編寫,同時也易于機(jī)器解析和生成,并有效地提升網(wǎng)絡(luò)傳輸效率。目前,Json處于數(shù)據(jù)交換語言的王者地位.
2.Json數(shù)組格式
Json的數(shù)據(jù)本身是數(shù)組,中括號包裹,數(shù)組的元素之間逗號分開.數(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ù)組,訪問每個元素 }
3.Json對象格式
Json的數(shù)據(jù)本身是對象,大括號包裹.對象采用鍵值對形式存儲,鍵固定為字符串類型,值是任意類型的數(shù)據(jù).鍵和值使用冒號分開.
var jsonObject = {"k1":"v1","k2":"v2","k3":"v3"}; //定義對象格式j(luò)son console.log(jsonObject.k1); //取出鍵k1對應(yīng)的值
4.數(shù)組對象相互嵌套格式
①:數(shù)組中的元素是對象
var jsonArray = [ {"k1":"v1"},{"k2":"v2"} ]; // 定義數(shù)組格式j(luò)son,數(shù)組元素是對象 console.log(jsonArray[0].k1); //訪問數(shù)組0索引的元素,該元素的鍵k1對應(yīng)的值
②:對象中的值是數(shù)組
var jsonObject = { "k1":["元素1","元素2"], "k2":["元素1","元素2"] }; // 定義對象格式j(luò)son,鍵是字符串類型,值是數(shù)組 console.log(jsonObject.k1[0]); //訪問對象的鍵是k1,對于的值為數(shù)組,數(shù)組的0索引元素
③:你中有我,我中有你
var json = { "k1":[ "元素1",{"key1":"value1"},{"key2":"value2"} ], "k2":[ {"key1":"value1"} ] }; //定義對象格式j(luò)son,鍵是字符串,值是數(shù)組,數(shù)組的元素是對象 console.log(json.k1[1].key1); //訪問json對象的鍵k1,對應(yīng)的是數(shù)組,訪問數(shù)組的1索引,數(shù)組的1索引上的元素是對象,訪問key1鍵對應(yīng)的值
二、FastJson介紹
FastJson 是阿里巴巴的開源JSON解析庫,它可以解析 JSON 格式的字符串,支持將 Java Bean 序列化為 JSON 字符串,也可以從 JSON 字符串反序列化到 JavaBean。
Fastjson 的優(yōu)點(diǎn)
- 速度快 fastjson相對其他JSON庫的特點(diǎn)是快,從2011年fastjson發(fā)布1.1.x版本之后,其性能從未被其他Java實(shí)現(xiàn)的JSON庫超越。
- 使用廣泛 fastjson在阿里巴巴大規(guī)模使用,在數(shù)萬臺服務(wù)器上部署,fastjson在業(yè)界被廣泛接受。在2012年被開源中國評選為最受歡迎的國產(chǎn)開源軟件之一。
- 測試完備 fastjson有非常多的testcase,在1.2.11版本中,testcase超過3321個。每次發(fā)布都會進(jìn)行回歸測試,保證質(zhì)量穩(wěn)定。
- 使用簡單 fastjson的 API 十分簡潔。
- 功能完備 支持泛型,支持流處理超大文本,支持枚舉,支持序列化和反序列化擴(kuò)展。
三、FastJson序列化API
序列化 : 是指將Java對象轉(zhuǎn)成json格式字符串的過程.JavaBean對象,List集合對象,Map集合,為應(yīng)用最廣泛的.
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ù)上.可在序列化和反序列化時進(jìn)行特性功能定制.
- 注解屬性 : name 序列化后的名字
- 注解屬性 : ordinal序列化后的順序
- 注解屬性 : format 序列化后的格式
- 注解屬性 : serialize 是否序列化該字段
- 注解屬性 : deserialize 是否反序列化該字段
- 注解屬性 : serialzeFeatures 序列化時的特性定義
七、@ JSonType注解
該注解作用于類上,對該類的字段進(jìn)行序列化和反序列化時的特性功能定制.
- 注解屬性 : includes 要被序列化的字段.
- 注解屬性 : orders 序列化后的順序.
- 注解屬性 : serialzeFeatures 序列化時的特性定義.
八、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ù)庫驅(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>
到此這篇關(guān)于SpringMVC集成FastJson使用流程詳解的文章就介紹到這了,更多相關(guān)SpringMVC集成FastJson內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
解析Java虛擬機(jī)中類的初始化及加載器的父委托機(jī)制
這篇文章主要介紹了Java虛擬機(jī)中類的初始化及加載器的父委托機(jī)制,包括命名空間等深層次的知識點(diǎn)講解,需要的朋友可以參考下2015-11-11SpringBoot集成Dubbo啟用gRPC協(xié)議
這篇文章主要介紹了SpringBoot集成Dubbo啟用gRPC協(xié)議,以及與原生 gRPC 在代碼編寫過程中的區(qū)別。感興趣的同學(xué)可以參考閱讀2023-04-04java?實(shí)現(xiàn)獲取指定位置后的第一個數(shù)字
這篇文章主要介紹了java?實(shí)現(xiàn)獲取指定位置后的第一個數(shù)字,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-01-01