SSM集成FastJson
FastJson
Json数据格式回顾
什么是json
JSON:(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式。它基于 ECMAScript(欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。目前,Json处于数据交换语言的王者地位。
Json数组格式
Json的数据本身是数组,中括号包裹。数组的元素之间用“,”分开,数组元素的数据类型没有限制。
//定义数组格式json
var jsonArray = ["a1","a2",...];
//打印json数组的a1元素
console.log(jsonArray[0]);
Json对象格式
Json的数据本身是对象,大括号去包裹。对象采用键值对形式存储,键固定为字符串类型,值是任意类型的数据,键和值使用“:”分开。
//定义对象格式json
var jsonObject = {"k1":"v1","k2":"v2"}
//打印json对象键k1的值
console.log(jsonObject.k1);
数组对象相互嵌套格式
数组中的元素是对象
var jsonArray = [
{"k1":"v1"},{"k2":"v2"}
]; // 定义数组格式json,数组元素是对象
console.log(jsonArray[0].k1); //访问数组0索引的元素,该元素的键k1对应的值
对象中的值是数组
var jsonObject = {
"k1":["a1","a2"],
"k2":["b1","b2"]
}; // 定义对象格式json,键是字符串类型,值是数组
console.log(jsonObject.k1[0]); //访问对象的键是k1,对于的值为数组,数组的0索引元素
互相嵌套
var json = {
"k1":[
"a1",{"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 的优点
- 速度快
fastjson相对其他JSON库的特点是快,从2011年fastjson发布1.1.x版本之后,其性能从未被其他Java实现的JSON库超越。 - 使用广泛
fastjson在阿里巴巴大规模使用,在数万台服务器上部署,fastjson在业界被广泛接受。在2012年被开源中国评选为最受欢迎的国产开源软件之一。 - 测试完备
fastjson有非常多的testcase,在1.2.11版本中,testcase超过3321个。每次发布都会进行回归测试,保证质量稳定。 - 使用简单
fastjson的 API 十分简洁。 - 功能完备
支持泛型,支持流处理超大文本,支持枚举,支持序列化和反序列化扩展。
FastJson序列化API
序列化:是指将Java对象转成json格式字符串的过程。Java Bean对象、List集合对象、Map集合,为应用最广泛的。
JSON.toJSONString
- 序列化
Java对象
public void objectToJSon(){
Student student = new Student("张三",22,getDate());
String str = JSON.toJSONString(student);
System.out.println(str);
}
- 序列化
List集合
public void listToJson(){
Student student1 = new Student("张三",22,getDate());
Student student2 = new Student("李四",20,getDate()); List<Student> list = new ArrayList<Student>();
list.add(student1);
list.add(student2);
String jsonString = JSON.toJSONString(list);
System.out.println(jsonString);
}
- 序列化
Map集合
public void mapToJson(){
Student student1 = new Student("张三",22,getDate());
Student student2 = new Student("李四",20,getDate()); Map<String,Student> map = new HashMap<String, Student>();
map.put("s1",student1);
map.put("s2",student2);
String jsonString = JSON.toJSONString(map);
System.out.println(jsonString);
}
- 序列化
FashJson反序列化API
JSON.parseObject
- 反序列化
Java对象
public void jsonToObject(){
String jsonString = "{\"age\":20,\"name\":\"张三\",\"birthday\":1617673647826}";
Student student = JSON.parseObject(jsonString, Student.class);
System.out.println(student);
}
- 反序列化
JSON.parseArray
- 反序列化
List集合
public void jsonToList(){
String jsonString = "[{\"age\":22,\"birthday\":1617673647826,\"name\":\"张三\"},{\"age\":20,\"birthday\":1617673647826,\"name\":\"李四\"}]";
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\":{\"age\":22,\"birthday\":1617673921907,\"name\":\"张三\"},\"s2\":{\"age\":20,\"birthday\":1617673921907,\"name\":\"李四\"} }";
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.setAge(20);
//student.setName("chen");
student.setBirthday(getDate()); String jsonString = JSON.toJSONString(student, SerializerFeature.WriteMapNullValue);
System.out.println(jsonString);
}
枚举常量
WriteNullStringAsEmpty字段为null,序列化为""public void testSerializerFeature(){
Student student = new Student();
student.setAge(20);
//student.setName("chen");
student.setBirthday(getDate()); String jsonString = JSON.toJSONString(student, SerializerFeature.WriteNullStringAsEmpty);
System.out.println(jsonString);
}
枚举常量
WriteNullNumberAsZero字段为null,序列化为0public void testSerializerFeature(){
Student student = new Student();
//student.setAge(20);
student.setName("chen");
student.setBirthday(getDate()); String jsonString = JSON.toJSONString(student, SerializerFeature.WriteNullNumberAsZero);
System.out.println(jsonString);
}
枚举常量
WriteNullBooleanAsFalse字段值为null输出false枚举常量
WriteDateUseDateFormat格式化日期格式枚举常量
PrettyFormat格式化输出
@JSonField注解
该注解作用于方法上,字段上和参数上。可在序列化和反序列化时进行特性功能定制
- 注解属性 :
name序列化后的名字; - 注解属性 :
ordinal序列化后的顺序; - 注解属性 :
format序列化后的格式; - 注解属性 :
serialize是否序列化该字段; - 注解属性 :
deserialize是否反序列化该字段; - 注解属性 :
serialzeFeatures序列化时的特性定义。
@JSonType注解
该注解作用于类上,对该类的字段进行序列化和反序列化时的特性功能定制
- 注解属性 :
includes要被序列化的字段; - 注解属性 :
orders序列化后的顺序; - 注解属性 :
serialzeFeatures序列化时的特性定义。
SSM集成 FastJson
SpringMVC框架中,默认使用的json序列化工具是jackson,我们需要在SpringMVM的配置文件中,配置消息转换器,由jackson切换到FastJson。
导入FastJson依赖的jar包
<!-- FastJson -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.47</version>
</dependency>
配置spring-mvc.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>
Controller层
@ResponseBody
@RequestMapping("/allBook")
public String list() {
List<Books> list = bookService.queryAllBook();
String jsonString = JSON.toJSONString(list);
//System.out.println(jsonString);
return jsonString;
}
SSM集成FastJson的更多相关文章
- ssm集成redis
身在一个传统的IT公司,接触的新技术比较少,打算年后跳槽,所以抽空学了一下redis. 简单的redis测试,咱们这边就不讲了,现在主要讲讲ssm集成redis的过程,因为现在项目用的就是ssm的框架 ...
- springboot:集成fastjson(教训)
网上有很多介绍,主要有两种. 1.在启动类中注入bean /** * 集成fastjson * * @return */ @Bean public HttpMessageConverters fast ...
- MyBatis进阶讲解+ssm集成
1.sql映射器Mapper MyBatis基于动态代理机制,让我们无需再编写Dao的实现. 传统Dao接口,现在名称统一以Mapper结尾,还有我们映射器配置文件要和映射器在同一个包. 1.1使用映 ...
- SSM集成
SSM集成 Spring和各个框架的整合 Spring目前是JavaWeb开发中最终的框架,提供一站式服务,可以其他各个框架整合集成 Spring整合方案 SSH Ssh是早期的一种整 ...
- java:Mybatis框架3(二级缓存,延时和积极加载,SSI(Ibatis)集成,SSM集成)
1.二级缓存: 需要导入二级缓存jar包: mybatis03: ehcache.xml: <ehcache xmlns:xsi="http://www.w3.org/2001/XML ...
- SSM集成(一):Mybatis3测试
Spring4+Mybatis3+SpringMVC(基于注解)整合步聚: 一)Mybatis3测试; 二)Mybatis3+Spring4整合; 三)Mybatis3+Spring4+SpringM ...
- Spring MVC 学习总结(十)——Spring+Spring MVC+MyBatis框架集成(IntelliJ IDEA SSM集成)
与SSH(Struts/Spring/Hibernate/)一样,Spring+SpringMVC+MyBatis也有一个简称SSM,Spring实现业务对象管理,Spring MVC负责请求的转发和 ...
- 【核心】project(idea文件)、module(iml文件)到SSM集成、热部署、Tomcat启动、MAVEN依赖冲突
http://wiki.jikexueyuan.com/project/intellij-idea-tutorial/project-composition-introduce.html 在 Inte ...
- SSM集成Easyui框架及多模块开发的认识
首先我们需要建立好一个emaven项目,并且在pom.xml中导入响应的jar包, <?xml version="1.0" encoding="UTF-8" ...
随机推荐
- Mweb发布blog到各博客平台
Mweb发布blog到各博客平台 主流博客平台 博客平台 博客园 CSDN 51CTO 博客类型 MetaWeblog API MetaWeblog API MetaWeblog API 博客网址 h ...
- 升级IDEA后Lombok不能用了,如何解决?
今天到工作室比较晚,在电脑前吃着早饭,看到提示IDEA提示升级,寻思已经有好久没有升过级了.一样等着,就升级下吧. 升级完毕重启之后,突然发现好多错误,原来的应用也没法启动了.仔细一看报错信息,是由于 ...
- [心得]安装MongoDB
1. 安装 (1) 其他默认 (2) 创建文件 在 E:\DevTools\MongoDB\Server\3.4 1 1 E:\DevTools\MongoDB\Server\3.4 下创建dat ...
- 我是如何用redis做实时订阅推送的(转)
前阵子开发了公司领劵中心的项目,这个项目是以redis作为关键技术落地的. 先说一下领劵中心的项目吧,这个项目就类似京东app的领劵中心,当然图是截取京东的,公司的就不截了... 其中 ...
- Flask(10)- 标准类视图
前言 前面文章讲解 Flask 路由的时候,都是将 URL 路径和一个视图函数关联 当 Flask 框架接收到请求后,会根据请求 URL,调用响应的视图函数进行处理 Flask 不仅提供了视图函数来处 ...
- ffiddler抓取手机(app)https包
很多同学有看过原文,但是按照原文还是没有设置成功(我就是其中一个)然后查了网上资料,在某些选项上进行增加,填写,配置通过.(和原文略有不同) 安装Fiddler,我们正常的流程在feiddler中设置 ...
- CSP2020游记
初赛 这次考试完全没准备好啊-- Day0 (10.10) 本来打算看看初赛的内容 然后因为各种原因咕了-- 就做了一下洛谷的模拟卷 结果 \(40 \text{min}\) 得 \(80 \text ...
- Django基础005-Django开发的整体过程
1.写views views.py代码块 1.在前端以/article/{{ article.id }}这种方式请求后台, 参数配置在urls.py中path('category/<int:id ...
- C语言:文本文件和二进制文件
学习了 fopen() 函数后,我们知道它的第二个参数是一个字符串,用来表示文件打开方式.如果字符串中出现b,则表示以二进制方式打开文件:如果字符串中出现t,或者两者都不出现,则表示以文本方式打开文件 ...
- CSS从入门到喜欢,从喜欢到着魔
如果把网页比作一个人的话,html就是他的骨架,而css是他的皮肤,javascript是神经控制着行动.html,css,javascript都是构建网页的核心技术. CSS简介 css指的是层叠样 ...