【发布时间】:2019-11-28 03:52:27
【问题描述】:
正如我们所知道的Serialization在java中,引用博客here被使用
将对象的状态转换为字节流,可以是 持久化到磁盘/文件中或通过网络发送到任何其他正在运行的 Java 虚拟机。
- REST API 案例:
现在考虑第二种情况,通过网络发送到另一个正在运行的 jvm,如果我们考虑一个 Rest API 的示例,即“host:port/path /资源”。
通常我使用 Spring 的 @RequestMapping 将资源模型 pojo 类返回为 ResponseEntity。我没有在模型类中实现Serializable接口,一切正常,我得到了json中API的响应。
ModelX.java
public class ModelX {
private int x = 2 ;
private String xs = "stringx";
// getters and setters
}
控制器方法:
@RequestMapping(value = "/test",method=RequestMethod.POST)
public ResponseEntity<ModelX> getTestModel(@RequestBody ModelX mox){
ModelX mx = new ModelX();
mx.setX(mox.getX());
mx.setXs(mox.getXs());
return new ResponseEntity<ModelX>(mx, HttpStatus.OK) ;
}
是不是因为 Spring 框架 使用那些 RestAPI 注释使其在后台可序列化?如果没有,如果不使其可序列化,我们如何能够通过网络发送。
- 持久性案例:
只是为了更多的思考,即使在持久化数据库中的对象的情况下,我们使用来自JPA的@Entity,现在我测试是否有任何@Entity注释类IS-A的实例@ @987654333 @ 与否。它给出了false。
@Entity
class Car {
int id ;
String name ;
//getters and setters
}
测试方法 -
Car c = new Car();
System.out.println(c instanceof Serializable);
O/p - 错误
所以即使我们尝试将这个对象的状态保存在数据库中,ORM 也会在后台进行某种序列化?
【问题讨论】:
-
对于 REST 部分,对象的状态不是转换为字节流,而是转换为 JSON 文本文档。对于 Hibernate/JPA 部分,请参阅此问题:stackoverflow.com/questions/2726300/…
-
@Arnaud 好吧,有道理。在现代应用程序中,我看到的主要使用的格式是 JSON,是否有任何特定的场景或应用程序(如果你知道的话)发送字节流更有益?
-
如果数据要“发送到”/“由”另一个 JVM(它将使用 ObjectInputStream 将字节转换回 java 对象)“发送到”/“读取”,则将状态转换为字节流是相关的。
-
@Arnaud 我得到了,但我仍然可以使用 API 与另一个 jvm 对话,对吗?所以我在问字节流发送/读取是否有益的任何场景,因为在序列化的情况下,写入文件然后再次读取它仍然会有一点开销。如果我错了,请纠正我
-
好吧,可能一件事是我们可以将状态保存到文件中,因此如果发送数据的应用出现故障,数据仍可用于其他 jvm。 (在 API 的情况下不会发生)
标签: java jpa serialization