[英]How to conditionally ignore properties with a Jackson AnnotationIntrospector
[英]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。 但這將導致代碼重復。
如果EmployeeCreateRequestDTO
和EmployeeUpdateRequestDTO
所有公共字段僅存在於EmployeeDTO
則它不會創建必要的代碼重復。
為避免重復,您有兩種方法。
1)繼承
EmployeeCreateRequestDTO
和EmployeeUpdateRequestDTO
是子類EmployeeDTO
。
優勢:子類可以直接訪問EmployeeDTO
父級的公共通用獲取者/設置者
2)組成
這些特定類中的每一個都包裝EmployeeDTO
實例並定義自己的字段。
優點:子類具有更大的靈活性來定義應從EmployeeDTO
字段訪問的子類。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.