根据权限限制Dropwizard响应对象

时间:2015-03-28 20:54:58

标签: jackson dropwizard jdbi

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

我们使用events资源的示例:

event资源包含属性field1field2field3field4

  1. 通过执行POST /events创建新事件时,请求正文应包含所有属性。
  2. 以普通用户身份GET /event/1提取活动时,回复正文应仅包含field1field2
  3. 以超级用户身份GET /event/1获取活动时,回复正文应包含field1field2field3
  4. 当涉及资源bean,jdbi查询和资源映射器时,处理这个(#2和#3)的最佳(简单)方法是什么?

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

1 个答案:

答案 0 :(得分: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映射器的查询仍然可以给出事件模型。根据用户的不同,您可以提供DTO。有一些库可用于将一个bean转换为另一个bean。您也可以使用它,或者您也可以编写要转换的逻辑。