java - Spring MVC - 我的域类是否应该为在线传输实现可序列化?

标签 java spring spring-mvc serialization jackson

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

我的理解是,如果我需要通过网络传输一个对象,该对象应该实现 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 是否有一般的经验法则?

最佳答案

为了更新这个,关于 Serializable 的建议已经改变,目前的建议似乎是 Don’t use Serializable for anything .
使用 Java 序列化 API 意味着您需要在线路的另一端使用 Java 来反序列化对象,因此您必须控制反序列化的代码以及序列化的代码。
这通常与 REST 应用程序无关,使用应用程序响应是其他人代码的业务,通常在您的组织之外。在构建 REST 应用程序时,通常会尽量避免对使用它的内容施加限制,选择一种与技术无关且广泛可用的格式。
使用对象实现的一些原因 java.io.Serializable将是:

  • 所以你可以把它放在一个 HttpSession 中
  • 这样您就可以在分布式应用程序的各个部分之间通过网络传递它
  • 因此您可以将其保存到文件系统并稍后恢复(例如,您可以使队列的内容可序列化并在应用程序关闭时保存队列内容,在应用程序开始恢复时从保存位置读取在关机时排队进入其状态)。

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

    关于java - Spring MVC - 我的域类是否应该为在线传输实现可序列化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38457074/

    相关文章:

    java - Linux shell 中一个程序同时过滤输出和获取退出码

    java - 当字符串已经被初始化和分配时拒绝声明

    java - 如何修复 Spring 中的 JSON 解码错误?

    javascript - 如何在 Spring Boot 中的提交表单中将变量传递给 Controller ​​?

    Java 与数据库的连接

    java - java中特殊字符算作空格

    java - @Transactional 注释不代理我的类

    java - 未调用 JdbcOperations 中使用的 Spring AOP 方面

    java - 使用 Spring MVC 的动态表单和数据绑定(bind)

    java - 如何在 Spring mvc 中使用新的 httpstatus 代码进行响应