当用关系序列化我的 POJO 时,我曾经为每个类创建不同的 View 。对于每个类,我创建了一个 View Basic
,仅显示标量属性,以及Detail
,其中包括我的所有关系。它看起来像这样:
public class Stage extends BasicDomainObject {
@JsonView(Views.Stage.Basics.class)
protected String stageType = "";
@JsonView(Views.Stage.Basics.class)
protected String scheduledReleaseGraph = "";
@JsonView(Views.Stage.Details.class)
private Pipeline pipeline;
// ...
}
然后,在我的 REST api 层中,我可以通过指定正确的 View 来序列化正确的 View :
mapper.writerWithView(Views.Stage.Details.class).writeValueAsString(bean);
现在,我必须在我的 Stage
类中添加一个字段 private Stage ParentStage
。我试图通过我的 Details
View 获得如下所示的输出:
{
"id": 2,
"type": "dev",
"scheduledReleaseGraph" "xxx",
"pipeline" : {
...
},
"parent" : {
"id": 1,
"type": "dev",
"scheduledReleaseGraph" "yyy"
}
}
此处的目标是仅显示一层深度的父
关联。
实现这一目标的常见模式是什么?
最佳答案
如果您使用 Jackson 2.0,我会查看 JsonIdentityInfo 属性: https://fasterxml.github.io/jackson-annotations/javadoc/2.0.0/com/fasterxml/jackson/annotation/JsonIdentityInfo.html
此注释可帮助您在序列化/反序列化时处理循环引用。
关于java - 对象树结构的 JSON 序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47908891/