如何动态忽略 json 属性

how to ignore json attribute dynamically

假设我有一个 Common Employee dto,如下所示

public class Employee {

    @JsonProperty("name")
    public String name;

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

    @JsonProperty("designation")
    public String designation;

    //setters and getters
}

Employee dto 可用于 Staffs 和 Managers。我正在使用外部 REST 服务,我将从那里获取员工和经理的详细信息。对于 Staffs,传入 json 将不包含现场部门,但对于 Managers,传入 json 将包含一个额外的部门字段。即将上任的员工和经理 json 如下所示

员工 json

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

经理json

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

解组工作正常,但问题是当我再次编组回到 json 以获取员工时,我变得像这样

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

任何人都可以告诉我如何忽略或删除字段,如果在编组 dto 期间不存在该字段,例如

对于 Staffs,编组后应该如下所示

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

对于管理器,它在编组后应该如下所示

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

如果 Employees 的部门总是 null,那么让 JSON 编组器忽略空值也许是可以接受的。这可以使用此处描述的注释来实现:How to tell Jackson to ignore a field during serialization if its value is null?

或者,您可以考虑使 Employee 成为一个抽象 class,从中删除部门列表,用 StaffManager 对它进行子class。

'Manager' class 将是抽象的并定义名称和名称:

public abstract class Manager {

  @JsonProperty("name")
  public String name;

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

“员工”class 会非常简单:

public class Staff extends Employee {}

'Manager' class 将包含部门列表:

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