在使用关系序列化我的POJO时,我曾经为每个类创建不同的视图。对于每个类,我创建了一个视图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层中,我可以通过指定正确的视图序列化正确的视图:
mapper.writerWithView(Views.Stage.Details.class).writeValueAsString(bean);
现在,我必须在private Stage parentStage
课程中添加一个字段Stage
。我正在尝试使用Details
视图显示输出:
{
"id": 2,
"type": "dev",
"scheduledReleaseGraph" "xxx",
"pipeline" : {
...
},
"parent" : {
"id": 1,
"type": "dev",
"scheduledReleaseGraph" "yyy"
}
}
此处的目标是仅显示一个深度级别的parent
关联。
实现这一目标的常见模式是什么?
答案 0 :(得分:1)
如果您使用Jackson 2.0,我会查看JsonIdentityInfo属性: https://fasterxml.github.io/jackson-annotations/javadoc/2.0.0/com/fasterxml/jackson/annotation/JsonIdentityInfo.html
此注释可帮助您在序列化/反序列化时处理循环引用。