@JsonView:不同的视角

@JsonView: different perspectives

我正在编写 Spring Web 服务,默认情况下使用 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;
  ...
}

如果我需要两个以上 'perspectives',我必须创建更多 interfaces/classes 怎么办? (例如 Views.Professor、Views.Principal、...)这是一个真正的好做法吗?

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

通用名称

如果您需要更多观点,您总是可以定义更多观点,这就是杰克逊JSON观点背后的理念,这就是它灵活的原因。

如果您在视图 类 中使用 通用名称,例如 BasicExtendedPublicPrivate 等等,您会发现在多个 bean 中 重用 它们会更容易。

继承

您始终可以依靠 继承 @JsonView。考虑以下示例,其中 Views.Private 扩展 Views.Public:

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

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