【发布时间】:2016-12-18 17:56:24
【问题描述】:
最近,我开始了一份新工作(现在已经 4 个月了),我还有很多东西要向 Spring 学习。我们遇到的问题之一是,当我们从数据库中获取对象并将它们映射到(存储库 -> 服务 -> 控制器)一个 JSON 时,它会带来很多不必要的数据 - 例如(小例子):
我们有一个 Employee 类,它有一个 Department 对象,它带来了以下内容:
{
'EmployeeId':1,
'Name':'John',
'Email':'email@moose.com'
'Department': {
'DepartmentId':1,
'name':'Development',
'location':'Somewhere',
}
}
班级详情:
@Entity
@Table(name = "Employees")
@NamedQuery(name = "Employee.findAll", query = "SELECT e FROM Employees e")
public class Employee implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "EmployeeId")
private long EmployeeId;
@Column(name = "Email")
private String email;
@Column(name = "address")
private String address;
@ManyToOne
@JoinColumn(name = "DepartmentId")
@JsonBackReference(value = "department_employee")
private Departament departament;
// Other attributes, setters & getters
}
如果我想构建一个“自定义”映射器,最佳做法是什么?或者我怎样才能实现一些东西,让我创建一个 JSON 给我带来这样的东西:
{
'EmployeeId':'1',
'Name':'John',
'Email':'email@moose.com'
}
我一直在做一些研究,偶然发现了以下示例:
Jackson's @JsonView, @JsonFilter and Spring
此外,我一直在考虑使用包含HashMap 的通用对象,这样我就可以在控制器上包含特定屏幕所需或需要的数据。
非常感谢任何帮助 - 希望问题足够清楚。
【问题讨论】:
-
如果不想序列化部门可以使用@JsonIgnoreProperties注解。
-
抱歉,如果我没有在问题上指定这一点 - 在某些屏幕上,我需要部门,例如当我需要更新员工时。但是,如果我只需要显示姓名、电子邮件和一些特定数据,那么哪种方式更合适呢? @JsonIgnoreProperties 完全忽略该字段。
-
也许我对类似问题的旧回答会有所帮助stackoverflow.com/a/30645468/1847202
标签: java json spring spring-mvc spring-data