我应该用Serializable标记spring mvc DTO吗?

时间:2018-09-05 20:04:18

标签: java json spring-mvc dto serializable

我们开发了非常常用的spring MVC应用程序
我们有:
控制器层REPEATABLE READ + @RestComtroller@GetMapping
服务层@PostMapping
存储库层(来自@Service的{​​{1}})

我们使用DTO在FE和BE之间进行通信。

今天,我的同事要求我将所有DTO标记为CrudRepository,并添加spring-data-jpa字段。我询问了原因,但他说这是“最佳做法”。我真的很困惑。 implements Serializable与Java序列化有关,但我们使用JSON进行BE和FE通信。

您能澄清这个问题吗?那么我应该用Serializable标记spring mvc DTO吗?

2 个答案:

答案 0 :(得分:0)

不,你不应该。

串行化意味着一侧将对象的状态保存为字节序列,而另一侧在将来的某个时间将这些字节重建为活动对象。

这意味着您应该在后端使用Java序列化API,将结果通过网络传递,并找到一种方法来如何在前端获得接收到的字节。序列化Java对象的格式是特定于Java的,并且并非设计为不可知的,因此您可能找不到合理的(简短的)方法。

您不应该这样做(因为您正在通过JSON与客户端通信)。

答案 1 :(得分:0)

  

只需执行java.io.Serializable即可   之间通过 IIOP JRMP RMI )传输数据   JVM实例。如果是纯Web应用程序,则域对象   有时出于{strong>缓存的目的存储在HTTPSession中。一种   http会话可以序列化或集群化。在这两种情况下   内容必须可序列化

在大多数情况下,没有理由使DTO可序列化,但是我想通过添加以下想法来扩展我的答案:在更实用的体系结构中,域对象也可以直接公开到表示层。因此,您不必将数据从域对象复制到DTO中(这违反了 DRY主体),您可以将分离的JPA实体作为值持有者传递给Web应用程序。在这种情况下,最好实现java.io.Serializable。

要具体说明您的问题,在决定是否需要实施Serializable时,应考虑以下两个事实: