Spring 引导 REST 仅在 JSON 响应中显示父级的 ID
Spring Boot REST display id of parent only in a JSON response
假设我有以下 class:
public class ChildEntity {
...
@ManyToOne
private ParentEntity parent;
...
}
现在,我有一个从数据库中检索子实体对象的 REST 端点,因此我的 JSON 如下:
{"id": "123", "name":"someName", "parent": { //parent fields here } ... }
我想以另一种方式格式化我的 JSON 回复。我希望父级仅显示数据库中的 ID,而不是整个对象:
{"id": "123", "name":"someName", "parentId": "1" ... }
基本上直接从端点返回实体不是一个好主意。您在数据库模型和响应之间建立了非常紧密的耦合。相反,实现一个 POJO class,它将等同于您发送的 HTTP 响应。
此 POJO 将具有所有 ChildEntity
字段和仅 parentId
并将在 HTTP 层中构建。
请看评论中的讨论,基本上这样一个从web层返回的对象在我看来不是DTO。
我注释@JsonIgnore 我不想成为 JSON 响应的一部分的字段。为每个实体创建并行 POJO 是一件代价高昂的事情。
@JsonIgnore
@NotNull
@Column(name="DELETED")
private boolean deleted = false;
假设我有以下 class:
public class ChildEntity {
...
@ManyToOne
private ParentEntity parent;
...
}
现在,我有一个从数据库中检索子实体对象的 REST 端点,因此我的 JSON 如下:
{"id": "123", "name":"someName", "parent": { //parent fields here } ... }
我想以另一种方式格式化我的 JSON 回复。我希望父级仅显示数据库中的 ID,而不是整个对象:
{"id": "123", "name":"someName", "parentId": "1" ... }
基本上直接从端点返回实体不是一个好主意。您在数据库模型和响应之间建立了非常紧密的耦合。相反,实现一个 POJO class,它将等同于您发送的 HTTP 响应。
此 POJO 将具有所有 ChildEntity
字段和仅 parentId
并将在 HTTP 层中构建。
请看评论中的讨论,基本上这样一个从web层返回的对象在我看来不是DTO。
我注释@JsonIgnore 我不想成为 JSON 响应的一部分的字段。为每个实体创建并行 POJO 是一件代价高昂的事情。
@JsonIgnore
@NotNull
@Column(name="DELETED")
private boolean deleted = false;