@JsonView:不同的观点

时间:2017-11-05 22:25:10

标签: java json spring jackson json-view

我正在编写Spring Web Service,默认使用Jackson。我正在使用@JsonView来指示我需要将哪个属性解析为我的JSON对象。因此,问题是:许多对象在不同的​​类中使用,但不完全是所有属性,例如:

class Professor {
  @JsonView({Views.Public.class, Views.Internal.class})
  private int id;
  @JsonView(Views.Internal.class)
  private String name;
  ...
}

class Classroom {
  @JsonView({Views.Public.class, Views.Internal.class})
  private int id;
  @JsonView(Views.Internal.class)
  private String name;
  ...
}

class Lecture {
  @JsonView(Views.Public.class)
  private Professor professor;
  @JsonView(Views.Public.class)
  private Classroom classroom;
  ...
}

如果我需要两个以上的“视角”,我必须创建更多的接口/类来做到这一点? (比如Views.Professor,Views.Principal,......)这是一个真正的好习惯吗?

我想听听一些建议或替代方案来解决这个问题。我对于走在正确的轨道上有点困惑。

1 个答案:

答案 0 :(得分:2)

通用名称

如果您需要更多观点,您总是可以定义更多观看次数,这是Jackson JSON观点背后的理念,是什么使它成为现实柔性的。

如果您在视图类中使用通用名称,例如BasicExtendedPublicPrivate等,那么您和#39;发现在多个bean中重用更容易。

继承

您始终可以依赖继承 @JsonView。请考虑以下Views.Private扩展Views.Public的示例:

public class Views {
    interface Public {}
    interface Private extends Public {}
}

使用@JsonView(Views.Private.class)注释的属性的序列化还将包含使用@JsonView(Views.Public.class)注释的属性。