有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

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

    So a simple solutions can be I can create separate DTOs, like EmployeeDTO, EmployeeCreateRequestDTO, EmployeeUpdateRequestDTO. But it will leads to duplication of codes.

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

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

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

    2)成分
    这些特定类中的每一个都包装了一个EmployeeDTO实例,并定义了它们自己的字段
    优点:子类可以更灵活地定义应该从EmployeeDTO字段访问的内容