2015-10-18 174 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 –