SpringMVC集成FastJson使用流程詳解
一、json數據格式回歸
1.什么是json
JSON:(JavaScript Object Notation, JS 對象簡譜) 是一種輕量級的數據交換格式。它基于 ECMAScript(歐洲計算機協(xié)會制定的js規(guī)范)的一個子集,采用完全獨立于編程語言的文本格式來存儲和表示數據。簡潔和清晰的層次結構使得 JSON 成為理想的數據交換語言。 易于人閱讀和編寫,同時也易于機器解析和生成,并有效地提升網絡傳輸效率。目前,Json處于數據交換語言的王者地位.
2.Json數組格式
Json的數據本身是數組,中括號包裹,數組的元素之間逗號分開.數組元素的數據類型沒有限制.
var jsonArray = ["元素1","元素2","元素3"]; //定義數組格式json
console.log(jsonArray[0]); //訪問json數組的元素
for(var i = 0 ; i < jsonArray.length ; i++){
console.log(jsonArray[i]); //遍歷數組,訪問每個元素
}3.Json對象格式
Json的數據本身是對象,大括號包裹.對象采用鍵值對形式存儲,鍵固定為字符串類型,值是任意類型的數據.鍵和值使用冒號分開.
var jsonObject = {"k1":"v1","k2":"v2","k3":"v3"}; //定義對象格式json
console.log(jsonObject.k1); //取出鍵k1對應的值4.數組對象相互嵌套格式
①:數組中的元素是對象
var jsonArray = [
{"k1":"v1"},{"k2":"v2"}
]; // 定義數組格式json,數組元素是對象
console.log(jsonArray[0].k1); //訪問數組0索引的元素,該元素的鍵k1對應的值②:對象中的值是數組
var jsonObject = {
"k1":["元素1","元素2"],
"k2":["元素1","元素2"]
}; // 定義對象格式json,鍵是字符串類型,值是數組
console.log(jsonObject.k1[0]); //訪問對象的鍵是k1,對于的值為數組,數組的0索引元素③:你中有我,我中有你
var json = {
"k1":[
"元素1",{"key1":"value1"},{"key2":"value2"}
],
"k2":[
{"key1":"value1"}
]
}; //定義對象格式json,鍵是字符串,值是數組,數組的元素是對象
console.log(json.k1[1].key1); //訪問json對象的鍵k1,對應的是數組,訪問數組的1索引,數組的1索引上的元素是對象,訪問key1鍵對應的值二、FastJson介紹
FastJson 是阿里巴巴的開源JSON解析庫,它可以解析 JSON 格式的字符串,支持將 Java Bean 序列化為 JSON 字符串,也可以從 JSON 字符串反序列化到 JavaBean。
Fastjson 的優(yōu)點
- 速度快 fastjson相對其他JSON庫的特點是快,從2011年fastjson發(fā)布1.1.x版本之后,其性能從未被其他Java實現的JSON庫超越。
- 使用廣泛 fastjson在阿里巴巴大規(guī)模使用,在數萬臺服務器上部署,fastjson在業(yè)界被廣泛接受。在2012年被開源中國評選為最受歡迎的國產開源軟件之一。
- 測試完備 fastjson有非常多的testcase,在1.2.11版本中,testcase超過3321個。每次發(fā)布都會進行回歸測試,保證質量穩(wěn)定。
- 使用簡單 fastjson的 API 十分簡潔。
- 功能完備 支持泛型,支持流處理超大文本,支持枚舉,支持序列化和反序列化擴展。
三、FastJson序列化API
序列化 : 是指將Java對象轉成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枚舉
該枚舉支持序列化的一些特性數據定義.
枚舉常量 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注解
該注解作用于方法上,字段上和參數上.可在序列化和反序列化時進行特性功能定制.
- 注解屬性 : name 序列化后的名字
- 注解屬性 : ordinal序列化后的順序
- 注解屬性 : format 序列化后的格式
- 注解屬性 : serialize 是否序列化該字段
- 注解屬性 : deserialize 是否反序列化該字段
- 注解屬性 : serialzeFeatures 序列化時的特性定義
七、@ JSonType注解
該注解作用于類上,對該類的字段進行序列化和反序列化時的特性功能定制.
- 注解屬性 : includes 要被序列化的字段.
- 注解屬性 : orders 序列化后的順序.
- 注解屬性 : serialzeFeatures 序列化時的特性定義.
八、SpringMVC集成 FastJson
SpringMVC框架中,默認使用的json序列化工具是jackson,我們需要在SpringMVM的配置文件中,配置消息轉換器,由jackson切換到FastJson.
環(huán)境搭建
- 創(chuàng)建Web項目
- 導入相關的依賴jar包
<!-- FastJson -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.62</version>
</dependency>
<!-- 數據庫驅動 -->
<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的消息轉換器-->
<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內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Java SpringBoot+vue+實戰(zhàn)項目詳解
這篇文章主要介紹了SpringBoot+VUE實現前后端分離的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2021-09-09
Spring Cloud LoadBalancer 負載均衡詳解
本文介紹了如何在Spring Cloud中使用SpringCloudLoadBalancer實現客戶端負載均衡,并詳細講解了輪詢策略和隨機策略的配置方法,此外,還提供了部署到云服務器并在多個實例之間進行負載均衡的步驟,感興趣的朋友一起看看吧2025-02-02
Java工廠模式優(yōu)雅地創(chuàng)建對象以及提高代碼復用率和靈活性
Java工廠模式是一種創(chuàng)建型設計模式,通過定義一個工廠類來封裝對象的創(chuàng)建過程,將對象的創(chuàng)建和使用分離,提高代碼的可維護性和可擴展性,同時可以實現更好的代碼復用和靈活性2023-05-05

