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调用时

c6cd3b26d5e7c6e20b709a7afb0f6fc2.png

如接口为

@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或对象。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在设计Django框架的RESTful API接口时,我们需要考虑以下几个方面: 1. URL设计 2. 请求方法的选择 3. 数据的序列化反序列化 4. 异常处理 下面我们将逐一介绍这些方面的设计。 1. URL设计 RESTful API接口的URL设计应该遵循一定的规范。一般而言,我们可以将URL按照以下的方式进行设计: ``` http(s)://host:port/api/{version}/{resource}/{resource_id}/ ``` 其中,`version`表示API版本,`resource`表示资源,`resource_id`表示资源的唯一标识符。例如: ``` http://localhost:8000/api/v1/users/1/ ``` 表示获取ID为1的用户信息。 2. 请求方法的选择 RESTful API接口支持以下四种请求方法: - GET:获取资源 - POST:创建资源 - PUT:更新资源 - DELETE:删除资源 这四种请求方法对应着CRUD操作中的"读取"、"创建"、"更新"和"删除"。 3. 数据的序列化反序列化RESTful API中,数据的序列化反序列化是非常重要的。序列化是将Python对象转换为JSON或XML等格式的过程,而反序列化则是将JSON或XML等格式的数据转换为Python对象的过程。 Django框架提供了一些强大的序列化工具,例如`django-rest-framework`。我们可以使用这些工具来实现数据的序列化反序列化。 4. 异常处理 在RESTful API接口的设计中,异常处理也是非常重要的。我们需要对可能出现的异常进行处理,并返回适当的错误信息。 在Django框架中,我们可以使用`try...except`语句来捕获异常,并使用`HttpResponse`对象返回错误信息。例如: ```python from django.http import HttpResponse def my_view(request): try: # some code here except: return HttpResponse('Error occurred', status=500) ``` 以上是Django框架RESTful API接口设计的基本要素,通过合理的设计可以实现一个高效、易用的API接口。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值