0

您如何看待通过服务公开域实体?我在一个应用程序中尝试过,但我得出的结论是向客户端公开域模型并不是一个好主意。

优点:

  • 非常容易将数据从客户端传输到客户端
  • 项目清单
  • (De)序列化非常简单:只需将 jackson 放在类路径中,它就会处理它。不需要额外的逻辑。
  • 无需复制实体 POJO。至少在早期阶段,API 资源将与领域模型几乎相同。

缺点:

  • API 与模型紧密耦合,您无法在不影响 API 的情况下更改模型
  • 部分回应。在某些情况下,您不想返回实体的所有字段,只返回其中的一部分。你如何实现它?

因此,让我们以下面的 REST 示例为例。以下 API 声明用户资源上的 GET 返回以下信息。获取/用户/12

{
    "firstName":"John",
    "lastName":"Poe"
    "address":"my street"
}

通常,我会创建一个用户实体、一个返回用户的用户服务和一个 REST 控制器来为请求提供服务,如下所示:

@RequestMapping("/users/{id}")
public @ResponseBody User getUser(@PathVariable Long id) {
    return userService.findById(id);
}

我应该避免返回用户实体吗?如果是,我应该创建另一个类并自己处理这个类和实体之间的映射吗?有这种模式吗?如何实现局部扩容?(即只返回用户的名字和姓氏)

PS:使用@JSONFilter 和 ObjectMapper 来完成部分响应对我来说似乎太重了,因为你失去了 spring 数据的美感

4

0 回答 0