我们开发了非常常用的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吗?
答案 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
时,应考虑以下两个事实: