簡體   English   中英

有條件地忽略DTO的特定屬性

[英]Ignore specific properties conditionally DTO

我有一個特定的要求,我有一個像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)繼承
EmployeeCreateRequestDTOEmployeeUpdateRequestDTO是子類EmployeeDTO
優勢:子類可以直接訪問EmployeeDTO父級的公共通用獲取者/設置者

2)組成
這些特定類中的每一個都包裝EmployeeDTO實例並定義自己的字段。
優點:子類具有更大的靈活性來定義應從EmployeeDTO字段訪問的子類。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM