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<String> 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类

class Person {
            int age =10;
            String name = "Kobe";

            public int getAge() {
                return age;
            }

            public void setAge(int age) {
                this.age = age;
            }

//            public String getName() {
//                return name;
//            }
//
//            public void setName(String name) {
//                this.name = name;
//            }
        }
Person person = new Person();
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或对象。

原文地址:https://www.cnblogs.com/jokie/p/9997821.html

时间: 2024-08-29 01:54:11

http请求/restful/序列化反序列化/JSON的相关文章

Jackson序列化和反序列化Json数据完整示例

Jackson序列化和反序列化Json数据 Web技术发展的今天,Json和XML已经成为了web数据的事实标准,然而这种格式化的数据手工解析又非常麻烦,软件工程界永远不缺少工具,每当有需求的时候就会出现各种类库,框架以及工具来解决这些基础的问题,Jackson就是这些工具中的一个,使用这个工具开发者完全可以从手工结束Json数据的重复劳动中解放出来.使用Jackson首先需要下载相应的类库,如下的Maven dependency列出了完整的POM dependency. 1 <dependen

常用json序列化/反序列化技术对比测试

目前常用的json工具有:1.json-lib:2.jakson-mapper:3.fastjson. 下面对这三种工具的性能进行简单对比测试. 测试样本:一个126K的json文件,内容为json数组. 测试方法:反序列化,读取文件中的json转化为java对象. 测试代码如下: 1 @Test 2 public void testDeserialize() throws Exception { 3 String dealer = "d:\\auto\\json\\100016109.js&q

C#序列化及反序列化Json对象通用类JsonHelper

当今的程序界Json大行其道.因为Json对象具有简短高效等优势,广受广大C#码农喜爱.这里发一个序列化及反序列化Json对象通用类库,希望对大家有用. public class JsonHelper { #region 对象类型序列化为json 字符 /// <summary> /// 对象类型序列化为json 字符 /// </summary> /// <typeparam name="T">实体类型</typeparam> ///

Python之路-json和pickle序列化/反序列化

首先引入json模块 序列化:使用json的dumps方法 反序列化:使用json的loads方法 过程:在json序列化后就可以将序列化的数据类型写入文件,然后在从文件中读出该数据类型,然后在进行反序列化 json对象中的其他的方法:dump(info,f)>>>其中Info是需要序列化的数据,f是一个文件句柄:load(f)>>>使用这两个方法不要在对文件进行读写 pickle和json使用方法类似,只是名字不同且pickle可以处理复杂数据类型而json不能(pi

Newtonsoft.Json.4.5.0 序列化与反序列化json字符串使用方法总结

在VS里下载安装: Json.NET 5.0.6 http://www.nuget.org/packages/Newtonsoft.Json/5.0.6 反序列化json字符串为List: json字符串如下: 1 {"docs": [{ 2 "uid": 2629577, 3 "nickname": "枕边疯电台", 4 "is_v": "true", 5 "category

Python序列化与反序列化-json与pickle

Python序列化与反序列化-json与pickle 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.json的序列化方式与反序列化方式 1>.json序列化 1 #!/usr/bin/env python 2 #_*_coding:utf-8_*_ 3 #@author :yinzhengjie 4 #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90

Python序列化之Json基础

python的序列化就是将python的基本对象转换为字符串的过程,反之则是反序列化. 序列化类型: -> import json import pickle 序列化定义: 序列化:对象.列表.字典都是python的基本数据类型,序列化其实就是把这些数据类型转换为字符串. 反序列化:将序列化后得到的字符串转反序列化成python的数据对象.列表.字典等类型 json的作用: 在python的基本数据类型与字符串之间进行相互转换的作用 json.dumps()函数: 将python基本数据类型转换

springboot学习(三)——http序列化/反序列化之HttpMessageConverter

以下内容,如有问题,烦请指出,谢谢! 上一篇说掉了点内容,这里补上,那就是springmvc的http的序列化/反序列化,这里简单说下如何在springboot中使用这个功能. 使用过原生netty http的人可能对http序列化比较熟悉,springmvc中的意思跟netty中的意思一样.http序列化(或者叫作http报文编码),就是将Java类转化为二进制流输出给http body:http反序列化,就是将http报文转换为程序内部的Java类.有了http反序列化,就不用再去一个个re

ModelSerializer(重点) 基表 测试脚本 多表关系建外键 正反查 级联 插拔式连表 序列化反序列化整合 增删查 封装response

一.前戏要做好 配置:settings.py #注册drf INSTALLED_APPS = [ # ... 'api.apps.ApiConfig', 'rest_framework', ] ? #配置数据库 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'dg_proj', 'USER': 'root', 'PASSWORD': '123', } } """ 在任何(根或者