java rest 序列化_http请求/restful/序列化反序列化/JSON
1.为什么要实现Serializable
(1)将内存中的对象数据存在磁盘中持久化
(2)将对象从一个应用程序发送到另一个应用程序
实现Serializable接口可以把对象序列化为字节流,实现传输必须实现序列化。
使用时将字节流反序列化为对象,应用其创建的副本。
2.为什么网络传输时对象要序列化,而字符串就不用序列化
网络传输需要将对象转换成字节流传输,序列化可以将一个对象转化成一段字节编码,以便在网络上传输或者做存储处理,使用时再进行反序列;
而字符串不用序列化的原因是字符串String是已经实现了Serializable接口的,所以它已经是序列化了的。
3.http请求中的JSON
网络传输中使用字符串进行交互,JSON是一种特殊规范的字符串,有自己的格式规定,与String的显示形式一样,但本质不是String!各端都支持JSON串的格式,将JSON容易转化为String进行网络传输。
fastJson是java用来实现序列化与反序列化的工具:
(1)PSOT请求参数为params时,对应postman的调用形式是拼参数。
String response = RestHttpClient.httpPost(url, headerList, params);
其中参数params为Map。
(2)POST请求参数为Body时,参数为JSONString,即JSON样子的String,postman调用时
如接口为
@RequestMapping(value = "toRefund", method =RequestMethod.POST)public ServerResult toRefund(@RequestBody final RefundRequestDto refundRequestDto)
程序调用时:
String response = RestHttpClient.httpPost(registerBasePath + refundSubmit, headers, JSON.toJSONString(refundRequestDto));
参数为JSONString,序列化为JSONString(即JSON形式的String,形式为JSON,本质为String)。fastJson中JSON.toJSONString(对象)将对象转为JSONString,进行网络传输。
得到的response也为String,JSONString。
转化为JSONObject(真正的JSON,比String增强了按key取值的功能),用
JSONObject object = JSON.parseObject(response);
JSON.parseObject(String)---->JSONObject,可以get值
object.getString("data")
String data是返回对象中的一个成员。
若要从JSONString得到对象,若返回的对象为Person,将其转化为JSONString的response回给调用方,调用方取得String的response后,还原为Person类
Person person = JSON.parseObject(response, Person.class);
还原时类Person中对应的成员参数名要对应一致。
4.上例中,Person对象序列化为JSONString时,成员变量要有对应的set,get方法,因为fastJson利用反射机制,调用get方法取值,set赋值。没有set无法序列化,没有get无法反序列化。
如Person类
classPerson {int age =10;
String name= "Kobe";public intgetAge() {returnage;
}public void setAge(intage) {this.age =age;
}//public String getName() {//return name;//}//
//public void setName(String name) {//this.name = name;//}
}
Person person = newPerson();
String string=JSON.toJSONString(person);
System.out.println("JSON.toJSONString(person) = " +string);
结果为:
JSON.toJSONString(person)= {"age":10}
name属性无法序列化。
JSONObject jsonObject =JSON.parseObject(string);
System.out.println("JSON.parseObject(string) = " +jsonObject);
结果为:
JSON.parseObject(string)= {"age":10}
序列化确实,反序列化也无法取到值。
所谓序列化指对象------->JSONString,反序列化指JSONString------>JSONObject或对象。
java rest 序列化_http请求/restful/序列化反序列化/JSON相关推荐
- java培训教程分享:Java中怎样将数据对象序列化和反序列化?
本期为大家介绍的java培训教程是关于"Java中怎样将数据对象序列化和反序列化?"的内容,相信大家都知道,程序在运行过程中,可能需要将一些数据永久地保存到磁盘上,而数据在Java ...
- Java对象表示方式1:序列化、反序列化和 transient 关键字的作用
前言快速到底 平时我们接触到的 Java 对象全都是在内存中的对象(它像磁盘中的一个个文件那样实实在在的存在着),所以它是无法进行 IO 操作或者网络通信的,因为在进行 IO 操作或者网络通信的时候, ...
- 【JAVA SE】第十三章 序列化与反序列化
第十三章 序列化与反序列化 文章目录 第十三章 序列化与反序列化 一.概念 1.序列化与反序列化 2.序列化有什么作用 二.代码实现 1.思路 2.创建一个Student类 3.创建TestSeria ...
- Java对象的序列化(Serialization)和反序列化详解
####1.序列化和反序列化 序列化(Serialization)是将对象的状态信息转化为可以存储或者传输的形式的过程,一般将一个对象存储到一个储存媒介,例如档案或记忆体缓冲等,在网络传输过程中,可以 ...
- Java中的Serializable接口之“序列化”与“反序列化”
你是不是想问:为什么有的类实现Serializable接口?还有什么是序列化和反序列化? 带着这个问题往下看,看完就明白了! 序列化与反序列化 序列化是指把对象转换为字节序列的过程,我们称之为对象的序 ...
- Java I/O中的对象序列化
Java I/O中的对象序列化 Java对象序列化将那些实现了Serializable接口的对象转换成一个字节序列,并能够以后将这个字节序列完全恢复为原来的对象.利用对象的序列化,可以实现轻量级持久性 ...
- Java编程思想学习笔记4 - 序列化技术
今天来学习下Java序列化和反序列化技术,笔者对<Java编程思想>中的内容,结合网上各位前辈的帖子进行了整理和补充,包括: 序列化概述 Java原生序列化技术 Hessian序列化技术 ...
- Java学习总结:51(对象序列化)
对象序列化 对象序列化的本质实际上就是将内存中所保存的对象数据转换为二进制数据流进行传输的操作. 但并不是所有类的对象都可以直接进行序列化操作,要被序列化的对象所在的类一定要实现java.io.Ser ...
- java序列化库_java 中序列化(Serializable)
18年5月份,在毕业快一年的时候,我终于把自己从研发助理偏向行政打杂,偶尔写一些前端代码的处境,回归到了初衷-安安静静写前后端代码的小小程序员~过程中的心酸也就不在这里吐啦,毕竟我是小太阳,永不熄灭的 ...
最新文章
- 往事并不如烟@武汉 --- 和同事们一起'诈金花’
- python编程入门经典实例-编程语言入门经典100例【Python版】
- MySQL从入门到精通50讲(十)-MySQL中null值如何处理
- 框架:mybatis的缓存机制
- 推荐 7 个 Vue2、Vue3 源码解密分析的开源项目
- 如何用Seaborn描绘线图,分面网格关联图,密度图,连接图,热力图,线性回归图,分面网格绘图
- Apache以及PHP的默认编码问题解决(详解)
- 【倍增】【线段树】雨林跳跃(luogu 7599[APIO 2021 T2])
- jq之fadeOut()
- python模拟页面调度LRU算法
- 非现场执法管理计算机(工业级),浅析非现场执法中存在问题的方法及对策
- Windows平台安装dlib方法汇总
- Python入门必备,Python零基础入门
- 零值初始化字符串常数作为函数模板参数
- Python实战教程 | 轻松批量识别数百个快递单号
- 火狐浏览器的hoxx附件还能用吗_Haspit
- Premiere(pr)怎样剪裁视频画面大小呢
- Excel数据分析(八)图表
- python网站攻击-利用Python进行Web渗透测试(十):密码攻击
- 系统分析与设计——系统顺序图
热门文章
- 白话异常检测算法Isolation Forest
- 斯坦福机器学习公开课学习笔记(1)—机器学习的动机与应用
- 电商后台:实例解读订单系统
- 使用Skywalking实现全链路监
- HikariCP--一款高性能的 JDBC 连接池
- Understanding Extension Class Loading--官方
- Linux定时增量更新文件--转
- 李宏毅深度学习——分类
- 以人为本的机器学习:谷歌人工智能产品设计概述 By 机器之心2017年7月17日 12:13 取代了手动编程,机器学习(ML)是一种帮助计算机发现数据中的模式和关系的科学。对于创建个人的和动态的经历
- 高效计算基础与线性分类器