0

我正在使用 Dropwizard 和 JDBI 构建 REST API,我需要使用同一资源的不同表示。

我们正在使用events资源的示例:

资源具有event属性field1field2和。field3field4

  1. 通过执行POST /events请求正文创建新事件时,应包含所有属性。
  2. 当以普通用户的身份获取事件时,GET /event/1响应正文应仅包含field1and field2
  3. 当以超级用户的身份获取事件时,GET /event/1响应正文应包含field1,field2field3

当涉及到资源 bean、jdbi 查询和资源映射器时,处理这个问题(#2 和 #3)的最佳(简单)方法是什么?

为每个表示分离 bean/mapper/query(不是很干燥,即使使用扩展的基本 bean)?在构建后过滤响应对象(不是很优雅,可能很脆弱,容易意外暴露太多数据)?

4

1 回答 1

1

这种情况不需要单独的映射器/查询。当业务模型和响应之间存在差异时,我们应该始终使用 DTO(数据传输对象)进行响应。比方说,你有这样的商业模式,

public class Event {
  private String field1;
  private String field2;
  private String field3;
  private String field4;
}

使用此模型创建事件。对于获取事件,应该有两个 DTO。

public class NormalUserEventDto implements IEventDto{
  private String field1;
  private String field2;
}

public class SuperUserEvent implements IEventDto {
  private String field1;
  private String field2;
  private String field3;
}

对 bean mapper 的查询还能给出 Event 模型。根据用户的不同,您可以提供 DTO。有一些库可用于将一个 bean 转换为另一个 bean。您也可以使用它,或者您也可以编写要转换的逻辑。

于 2015-03-29T11:46:16.733 回答