我有一个 Springboot Rest 项目。假设我有 User 类作为实体。直接在POST方法的RequestBody中传递这个实体对象可以吗?我的功能将与此顺利配合。我的问题是,这是否是一个安全漏洞?如果是,解决方案是什么?
这会工作得很好并且是一个简单的实现,但从架构上来说这不是一个好的实践,因为这将你的其余实现与数据库设计紧密耦合并将其暴露给 API 的使用者。
您应该让请求/响应对象进入您的 api 并从中退出,将其与数据库解耦,并允许您在数据访问之上的层执行验证和其他业务规则。如果您发现必须在实体和 dtos 之间编写大量分配代码,那么您可以使用像 http://modelmapper.org/ 或 http://mapstruct.org/
这样的工具您不应该向用户公开关键数据。话虽这么说,如果您不想为每个实体创建单独的 DTO,您可以使用
Jackson Annotations
(如 @JsonIgnore
)来定义您希望接收或向用户显示的实体字段(考虑到您有休息应用)。
因此,只要不暴露关键数据,您就可以随心所欲地进行操作,但创建 DTO 被认为是一种很好的做法。