2

我正在编写一个 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;
  ...
}

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

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

4

1 回答 1

2

通用名称

如果你需要更多的视角,你总是可以定义更多的视图,这就是 Jackson JSON 视图背后的想法,这也是它灵活的原因。

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

遗产

你总是可以依靠继承@JsonView考虑以下示例,其中Views.Privateextends Views.Public

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

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

于 2017-11-06T11:45:03.533 回答