使用 DTO 时是否可以返回真实实体



例如,我需要更新EntityA。当我使用DTO时,用户需要将DTO转移到控制器中进行更新。在服务层,我提取实体并使用DTO字段更新它,然后再次保存它。

非常简单和基本的东西,但如果我想返回一个更新的对象呢?我无法返回发送给我的DTO用户(它在某些字段中为NULL,因为用于更新和创建的DTO相同)。在这种情况下我该怎么做?创建第二个DTO只是为了返回一个更新的值?在更新中返回void是否常见?

一般不应该在REST api上公开实体。因为那样你可能无法更改实体。

唯一的例外是当REST API仅由UI使用并且UI是整个应用程序的一部分时。

回到你的问题:你必须返回一个从保存的实体更新的DTO。

要读取dto,您不需要映射它们,您可以直接使用JPA构造函数表达式或Spring Data JPA各种投影选项获取dto。

正如这篇文章所说的,应该有一个RESTful '操作返回值

HTTP状态码200 OK,表示对现有资源的更新PUT成功。不需要响应体。(参见第9.6节,204节No Content更合适)

这意味着,您不会被迫返回更新的对象,这取决于您,我通常返回PUT的主体,因为一个简单的原因,用户应该始终拥有db上呈现的真实情况的表示。

什么REST PUT/post/DELETE调用应该按照约定返回?要回答另一个问题,不,您不需要创建第二个DTO,您可以将实体值映射到用户发送给您的实体值,或者您可以按照Simon所说的做。

最新更新