杰克逊:从一个JsonView类中排除字段

时间:2017-07-10 08:14:20

标签: java json jackson

我有一个模特。

public class Model {
    @JsonProperty("model_id")
    private Integer id;
    @JsonView(face.Test.class)
    @JsonProperty("model_name")
    private String name;
    @JsonProperty("model_level")
    private Byte level;
    @JsonView(face.New.class)
    @JsonProperty("model_score")
    private Byte score;
    @JsonView(face.Test.Tester.class)
    @JsonProperty("model_community")
    private Long community;

    //getter and setters
}

您可以看到我的idlevel字段将包含在从此模型创建的所有JSON中。

现在我想在所有JSON(从这个模型中创建)中添加示例字段级别,除了一个。

有类似@JsonView(!face.Example.class)的内容吗?如果不是,那么这个案例的最佳解决方案是什么?

非常感谢

1 个答案:

答案 0 :(得分:1)

我相信您需要使用视图类继承来实现此目的。

public class face {
  public static class BaseView {}
  public static class Test extends BaseView {}
  public static class New extends BaseView {}
  public static class Example {} // no parent
}

所以:

public class Model {

  // included in all views
  private Integer id;

  // only in Test view
  @JsonView(face.Test.class)
  private String name;

  // included in BaseView and its children (ie not Example)
  @JsonView(face.BaseView.class)
  private Byte level;

  // ...

}

大概你有一个逻辑层次的视图,它不仅适用于一个字段。