我有一个用例,其中使用带有排除信息的JSONView注释似乎更合适,例如:
@JSONView(Views.Report1.class, include=false)
到目前为止,Jackson(1.9.2)还不直接支持这一点(包括属性),因为我想知道Jackson是否有一个简单的变通方法来实现这一点。
用例:
- Report1:此视图应具有
id, name, info1, info2, info3, info4
属性 - Report2:此视图应具有
id, name, info1, info2, info4
属性 - 报告[3..]说许多其他观点也是可能的
private int id;private字符串名称;private字符串info1;private字符串info2;//忽略if view=report2@JsonView(ReportViews.Report2.class,include=false)private字符串info3;private字符串info4
我的用例是排除基于视图的属性(或者说报表ID)。使用JSONView方法,我需要将除Report2之外的所有视图添加到info3属性中,以将其排除在外。不太合身。
在这种情况下,正确的方法应该是什么?如果没有类似的解决方案,那么将JSONView自定义为排除/包含将是正确的解决方案。
似乎没有办法以这种方式从特定视图中排除字段。
但是,通过使用接口从所需元素组成视图,可以非常灵活地构建视图。
在上面的情况下,我会尝试这个:
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;
Jackson的JSON视图功能基于包含标准,因此您不能更改现有的注释。