2015-10-18 103 views
0

讓說我有一個共同的員工DTO像如下圖所示如何忽略JSON屬性動態

public class Employee { 

    @JsonProperty("name") 
    public String name; 

    @JsonProperty("departments") 
    public List<Department> departments; 

    @JsonProperty("designation") 
    public String designation; 

    //setters and getters 
} 

的員工DTO可同時用於人員和管理人員。我正在使用外部REST服務,我將從中獲取員工和經理的詳細信息。對於工作人員,傳入的json將不包含字段部門,但對於管理員,傳入的json將包含一個額外的部門字段。員工和經理傳入的JSON是如下圖所示

員工JSON

{ 
    "name": "Vineeth", 
    "designation": "Developer" 
} 

經理JSON

{ 
    "name": "Rohit", 
    "designation": "Manager", 
    "departments": ["Dept1", "Dept2", "Dept3"] 
} 

解組工作正常,但問題是,當我再次回到元帥json的工作人員我越來越喜歡這個

{ 
    "name": "Vineeth", 
    "designation": "Developer", 
    "departments": null 
} 

誰能告訴我如何忽略或刪除字段如果字段編組過程中不存在DTO像

爲員工應該是這樣的編組

{ 
    "name": "Vineeth", 
    "designation": "Developer" 
} 

後如下圖所示,對於經理人的應該是這樣的編組後,如下圖所示

{ 
    "name": "Rohit", 
    "designation": "Manager", 
    "departments": ["Dept1", "Dept2", "Dept3"] 
} 
+0

除了下面的回答,試着在設計課程時考慮封裝 - 你不要t使成員變量'public',使他們'私人'(或''如果你實現我的子類化建議''''''''''''''''''''''''''''''''''''''' – NickJ

回答

1

如果員工總是有null部門,那麼也許是可以接受的果凍的JSON馬rshaller忽略空值。這可以通過使用註釋實現如下descriped:How to tell Jackson to ignore a field during serialization if its value is null?

或者,你可能會考慮員工的一個抽象類,從中取出部門名單,StaffManager繼承它。

的「經理」類將是抽象的定義名稱和標號:

public abstract class Manager { 

    @JsonProperty("name") 
    public String name; 

    @JsonProperty("designation") 
    public String designation; 
} 

的「Staff`類將是非常簡單的:

public class Staff extends Employee {} 

的‘經理’級將包含部門列表:

public class Manager extends Employee { 
    @JsonProperty("departments") 
    public List<Department> departments; 
} 
+0

你對此有任何建議嗎?http://stackoverflow.com/questions/33198270/common-dto-for-two-incoming-rest-json –