我有一个特定的要求,我有一个像 EmployeeDTO.java 这样的 POJO
具有以下字段;
int employeeId;
String Name;
double salary;
String createdBy;
Date createdTimestamp;
String updatedBy;
Date updatedTimestamp;
现在我的要求是,当我收到一个 Create API 请求作为 JOSN 时,我不应该收到任何字段,如 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 等
最佳答案
使用明确表示业务用例的数据/行为的特定类(在可读性、可维护性方面)比混合不应该的东西更好。
So a simple solutions can be I can create separate DTOs, like EmployeeDTO, EmployeeCreateRequestDTO, EmployeeUpdateRequestDTO. But it will leads to duplication of codes.
如果 EmployeeCreateRequestDTO
和 EmployeeUpdateRequestDTO
的所有公共(public)字段仅存在于 EmployeeDTO
中,则不一定会造成代码重复。
为了避免重复,您有两种方法。
1) 继承
EmployeeCreateRequestDTO
和 EmployeeUpdateRequestDTO
是 EmployeeDTO
的子类。
优点:子类可以直接访问 EmployeeDTO
父类的公共(public)公共(public) getter/setter
2) 构图
这些特定类中的每一个都包装一个 EmployeeDTO
实例并定义自己的字段。
优点:子类可以更灵活地定义哪些内容可以从 EmployeeDTO 字段访问。
关于java - 有条件地忽略特定属性 DTO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43459798/