Spring MVC - 我的域类应该实现Serializable以进行线上传输吗?

glh*_*lhr 22 serialization spring-mvc jackson

我正在尝试通过实现一个简单的REST API来学习Spring Boot.

我的理解是,如果我需要通过线路传输对象,该对象应该实现Serializable.

在网络上的许多示例中,包括官方示例,需要从服务器传输到客户端的域类(反之亦然)不实现Serializable.

例如:https://spring.io/guides/gs/rest-service/

但在某些情况下,他们会:

例如:https://github.com/szerhusenBC/jwt-spring-security-demo/blob/master/src/main/java/org/zerhusen/security/JwtAuthenticationRequest.java

是否有关于何时实施Serializable的一般经验法则?

Nat*_*hes 16

为了更新这个,关于Serializable的建议已经改变,目前的建议似乎是不要使用Serializable来做任何事情.

使用Java序列化API意味着您需要在线路的另一端使用Java来反序列化对象,因此您必须控制反序列化的代码以及序列化的代码.

这通常与REST应用程序无关,使用应用程序响应是其他人代码的业务,通常在组织外部.在构建REST应用程序时,尽量避免对正在使用它的内容施加限制是正常的,选择一种技术无关且广泛可用的格式.

使对象可序列化的一些原因是:

  • 所以你可以把它放在HttpSession中

  • 所以你可以在分布式应用程序中的层之间传递它

  • 因此,您可以将其保存到文件系统并稍后恢复(例如,您可以使队列的内容可序列化并在应用程序关闭时保存队列内容,在应用程序开始恢复时从保存位置读取在关机时排队到其状态).

在所有这些情况下,您进行序列化以便将某些内容保存到文件系统或通过网络发送.

  • `所以你可以把它放在HttpSession中这一点对我的情况非常有意义.谢谢 :) (3认同)

a b*_*ver 5

有很多方法可以序列化一个对象。Java 的对象序列化只是其中之一。从官方文档

序列化对象意味着将其状态转换为字节流

REST API 通常发送和接收 JSON 或 XML。在这种情况下,序列化对象意味着将其状态转换为String

“通过网络发送对象”和实现Serializable. 您使用的技术决定了是否Serializable必须实施。