我有一个特定的要求,我有一个像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,但不低于4个字段createdBy,createdTimestamp,updatedBy,updatedTimestamp。

因此,一个简单的解决方案就是我可以创建单独的DTO,例如EmployeeDTO,EmployeeCreateRequestDTO,EmployeeUpdateRequestDTO。但这将导致代码重复。

有没有更好的方法或json功能/注释可用于实现此目的?

我想要这个的原因,在Swagger模型架构中,它显示了EmplyeeDTO中所有可用的字段,我想在这里针对创建请求进行具体说明用户不应该看到在id中后端设置的任何字段,createdBy等。

最佳答案

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


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


如果EmployeeCreateRequestDTOEmployeeUpdateRequestDTO的所有公共字段仅出现在EmployeeDTO中,则它不一定会创建代码重复。

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

1)继承
EmployeeCreateRequestDTOEmployeeUpdateRequestDTOEmployeeDTO的子类。
优点:子类可以直接访问EmployeeDTO父级的公共通用获取程序/设置程序

2)组成
这些特定类中的每一个都包装一个EmployeeDTO实例并定义它们自己的字段。
优点:子类具有更大的灵活性来定义应从EmployeeDTO字段访问的子类。

08-24 14:59