【问题标题】:Ignore specific properties conditionally DTO有条件地忽略特定属性 DTO
【发布时间】:2017-04-17 21:19:00
【问题描述】:

我有一个特定的要求,我有一个像 EmployeeDTO.java 这样的 POJO

具有以下字段;

int employeeId;
String Name;
double salary;
String createdBy;
Date createdTimestamp;
String updatedBy;
Date updatedTimestamp; 

现在我的要求是,虽然我将获得一个作为 JOSN 的 Create API 请求,但我不应该获得任何字段,例如employeeId、createdBy、createdTimestamp、updatedBy、updatedTimestamp。

但在 GET API 响应中,我应该发送所有这些字段。

我不能在此处使用 jsonIgnore,因为对于像employeeId 这样的字段,我不希望在请求中使用它,但我想在响应中发送它。

在 PATCH/PUT api 调用中,我期待请求中 UI 的employeeId 但不低于createdBy、createdTimestamp、updatedBy、updatedTimestamp 4 个字段。

所以一个简单的解决方案可以是我可以创建单独的 DTO,例如 EmployeeDTO、EmployeeCreateRequestDTO、EmployeeUpdateRequestDTO。但会导致代码重复。

有没有更好的方法或 json 功能/注释可以实现这一点?

我想要这个的原因,在 Swagger 模型架构中,它显示 EmplyeeDTO 中可用的所有字段,我想在此处具体说明创建请求用户不应该看到任何在后面设置的字段以 id、createdBy 等结尾。

【问题讨论】:

    标签: java json rest api swagger


    【解决方案1】:

    使用明确表示业务用例的数据/行为的特定类(在可读性、可维护性方面)比混合不应该的东西更好。

    所以一个简单的解决方案可以是我可以创建单独的 DTO,比如 EmployeeDTO、EmployeeCreateRequestDTO、EmployeeUpdateRequestDTO。但 会导致代码重复。

    如果EmployeeCreateRequestDTO 和EmployeeUpdateRequestDTO 的所有公共字段仅存在于EmployeeDTO 中,则不一定会产生代码重复。

    为避免重复,您有两种方法。

    1) 继承
    EmployeeCreateRequestDTO 和 EmployeeUpdateRequestDTO 是 EmployeeDTO 的子类。
    优点:子类可以直接访问 EmployeeDTO 父级的公共公共 getter/setter

    2) 作曲
    这些特定类中的每一个都包装了一个 EmployeeDTO 实例并定义了自己的字段。
    优点:子类可以更灵活地定义哪些可以从EmployeeDTO 字段访问。

    【讨论】:

      猜你喜欢
      • 2016-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-10
      • 2011-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多