【发布时间】:2019-09-18 08:25:31
【问题描述】:
我想根据用例为同一个复杂的 Java 对象生成不同的 Json 输出。
例如检查以下代码:
class Employee {
private Long id;
private String name;
private EmployeeDetail detail;
private Department department;
...
}
class Department {
private Long id;
private String name;
private String address;
...
}
class EmployeeDetail {
private Long id;
private int salary;
private Date birthDate;
...
}
如果我将 Employee 转换为 Json,Employee、EmployeeDetail 和 Department 中的所有字段都将显示。它适用于一个用例。
但是在第二个用例中,我想跳过除 id 字段之外的部门详细信息,但保留完整的 EmployeeDetail。
我知道我可以在Department 类的id 字段中添加类似@JsonView(EmployeeView.Basic.class) 的内容并使用Json 视图。但是,对于更简洁的代码,我想在 Employee 类中解决它,如下所示:
class Employee {
private Long id;
private String name;
@JsonAllFields
private EmployeeDetail detail;
@JsonIdOnly
private Department department;
...
}
目前我使用 Jackson 库,但可以根据需要进行切换。
【问题讨论】:
-
您能否为您需要的每种输出类型创建一个“表示”类,该类在构造函数中接受“根”类(以填充它),但只包含您的 JSON 输出的相关字段?
-
是的,它可以工作,但我尽量避免这种情况。