5

我有一个用例,似乎更适合将 JSONView 注释与排除信息一起使用,例如:

@JSONView(Views.Report1.class, include=false)

到目前为止,杰克逊(1.9.2)不直接支持(包括属性),我想知道杰克逊是否有一个简单的解决方法来实现这一点。

用例:

  • Report1:这个视图应该有id, name, info1, info2, info3, info4属性
  • Report2:这个视图应该有id, name, info1, info2, info4属性
  • 报告[3 ..] 说许多其他观点是可能的
私人 int id;
  私有字符串名称;
  私人字符串信息1;
  私人字符串信息2;
  //如果 view=report2 则忽略
  @JsonView(ReportViews.Report2.class , include=false)
  私有字符串 info3;
  私有字符串 info4;

我的用例是排除基于视图的属性(或者说报告 ID)。使用 JSONView 方法,我需要将除 Report2 之外的所有视图添加到 info3 属性以将其排除。不太合适。

在这种情况下,正确的方法应该是什么?如果没有类似的东西已经可用,是否定制 JSONView 以排除/包含将是正确的解决方案。

4

2 回答 2

2

似乎没有办法以这种方式从特定视图中排除字段。

但是,您可以通过使用接口从所需元素组合视图来非常灵活地构建视图。

在上述情况下,我会尝试这个:

public class ReportViews {
    public interface NeedsInfo3 {};

    public static class Report1 implements NeedsInfo3 {};
    public static class Report2 {};
}

然后在您的模型中使用特定于字段的视图。

private int id;
private String name;
private String info1;
private String info2;

@JsonView(ReportViews.NeedsInfo3.class)
private String info3;
private String info4;
于 2013-05-31T05:23:54.500 回答
1

Jackson 的 JSON 视图功能基于包含标准,因此您无法更改现有注释。

于 2012-12-05T01:20:12.943 回答