Spring Boot 中为什么不要将 DTO 与 Entity 混合使用

刚开始学习 Spring Boot 的时候,我对 DTOs(数据传输对象)和 Entities(实体类)没有太深入的思考。通常的做法就是创建一个类,然后到处使用——数据库操作、API 接口、业务服务等等。看起来一切都很顺利……直到问题出现。

在这篇文章中,我想分享一下关于 DTOs 和 Entities 的一些经验教训。我会解释它们各自的作用,为什么需要将它们分离,以及忽略这一点会带来哪些实际问题。

最初的错误做法

在某个项目的初期,我创建了一个 User 类,包含 idnameemailpassword 等字段。然后在以下所有场景中都使用这同一个类:

  • 数据库持久化(作为 JPA 实体)
  • 接收前端传递的数据
  • 返回 API 响应结果

开发速度确实很快,代码量也不多。但随着项目的发展,问题逐渐暴露出来。

问题的出现

有一天,产品经理提出了新需求:前端需要展示用户的公开资料,但不能包含邮箱和密码信息

听起来很简单,对吧?

但问题是,我的 API 直接返回完整的 User 实体对象,响应中包含了敏感数据,比如密码哈希值。

我们只能临时用 @JsonIgnore 注解来解决,但接下来另一个确实需要返回邮箱的 API 又出现了问题。

这时候才意识到,一个类已经无法满足所有需求了。

DTO 的解决方案

我创建了一个新的 UserDTO 类,只包含需要在响应中返回的字段——比如 id

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序猿DD

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值