【发布时间】:2015-10-11 17:56:33
【问题描述】:
我在开发一个公开 REST API 的 Java 应用程序。我遵循领域驱动设计。 REST API 返回聚合根以及聚合内的所有实体。
该模型是一组 Java POJO 类,不包含对基础架构代码的任何引用,并且由 Jersey 提供 REST 支持并带有 Jackson 序列化。
新要求是根据用户权限添加对返回/不返回模型部分的支持,例如对于GET /user/{user_id}:
- 普通用户应该得到
{login: "john", name: "John Smith"} - 而管理员用户应该得到
{id: 1, login: "john", name: "John Smith", active: "true"}
我考虑了几个选项:
- 创建 DTO 类,如
UserForAdminsDTO、UserForRegularUserDTO - 扩展模型类(通过继承或组合)并提供一个实现,该实现将覆盖(在继承的情况下)不应为普通用户返回数据的方法,例如
Long getId() { return null; } - 创建自定义序列化器/反序列化器,它将在模型上使用自定义注释,例如
@OnlyAvailableFor(ADMIN)
您知道其他方法吗?你觉得我提供的三个怎么样?
【问题讨论】:
标签: java rest domain-driven-design