java有条件地忽略特定属性DTO
我有一个特别的要求,我有一个像EmployeeDTO一样的POJO。爪哇
下面的字段
int employeeId;
String Name;
double salary;
String createdBy;
Date createdTimestamp;
String updatedBy;
Date updatedTimestamp;
现在我的要求是,虽然我将获得一个创建API请求作为JOSN,但我不应该获得任何字段,如employeeId、createdBy、createdTimestamp、updatedBy、UpdateTimeStamp
但在GET API响应中,我应该发送所有这些字段
我不能在这里使用jsonIgnore,因为像employeeId这样的字段我没有在请求中删除它,但我想在响应中发送它
在PATCH/PUT api调用中,我希望请求中的UI中有employeeId,但不低于4个字段createdBy、createdTimestamp、updatedBy、UpdateTimeStamp
所以一个简单的解决方案是我可以创建单独的DTO,比如EmployeeDTO,EmployeeCreateRequestDTO,EmployeeUpdateRequestDTO。但这会导致代码重复
有没有更好的方法或json特性/注释可以实现这一点
我之所以要这样做,是因为在Swagger模型模式中,它显示了EmplyedTo中所有可用的字段。我想在这里具体说明一个创建请求,用户不应该看到任何在后端设置的字段,比如id、createdBy等
# 1 楼答案
使用明确表示业务用例的数据/行为的特定类(在可读性和可维护性方面)比混合使用不应该混合的东西要好
如果
EmployeeCreateRequestDTO
和EmployeeUpdateRequestDTO
的所有公共字段仅存在于EmployeeDTO
中,则不一定会产生代码重复为了避免重复,有两种方法
1)继承性
EmployeeCreateRequestDTO
和EmployeeUpdateRequestDTO
是EmployeeDTO
的子类优点:子类可以直接访问
EmployeeDTO
父类的公共getter/setter2)成分
这些特定类中的每一个都包装了一个
EmployeeDTO
实例,并定义了它们自己的字段优点:子类可以更灵活地定义应该从
EmployeeDTO
字段访问的内容