gpt4 book ai didi

java - 有条件地忽略特定属性 DTO

转载 作者:行者123 更新时间:2023-12-02 13:23:54 25 4
gpt4 key购买 nike

我有一个特定的要求,我有一个像 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.

如果 EmployeeCreateRequestDTOEmployeeUpdateRequestDTO 的所有公共(public)字段仅存在于 EmployeeDTO 中,则不一定会造成代码重复。

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

1) 继承
EmployeeCreateRequestDTOEmployeeUpdateRequestDTOEmployeeDTO 的子类。
优点:子类可以直接访问 EmployeeDTO 父类的公共(public)公共(public) getter/setter

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

关于java - 有条件地忽略特定属性 DTO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43459798/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com