Spring MVC-我的域类是否应该为有线传输实现Serializable?


问题内容

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

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

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

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

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

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

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


问题答案:

要对此进行更新,有关Serializable的建议已更改,目前的建议似乎是“不要对任何东西使用Serializable”。

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

这通常与REST应用程序无关,使用应用程序响应是他人代码的业务,通常是在组织外部。在构建REST应用程序时,通常会尝试避免对使用它的对象施加限制,而是选择一种与技术无关且广泛使用的格式。

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

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

  • 因此您可以在分布式应用程序的各个部分之间通过网络传递它

  • 因此您可以将其保存到文件系统中,然后再还原(例如,您可以使队列的内容可序列化,并在应用程序关闭时保存队列的内容,并在应用程序开始还原存储库时从保存位置读取)进入关闭状态时排队)。

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