如何动态忽略 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,从中删除部门列表,用 Staff
和 Manager
对它进行子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;
}
假设我有一个 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,从中删除部门列表,用 Staff
和 Manager
对它进行子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;
}