2012-12-04 106 views
5

我已经在那里它似乎更适合使用JSONView批注与独占信息的使用情况,例如:JSONView注释包含/排除属性

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

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

使用案例:

  • 报表1:这种观点应该有id, name, info1, info2, info3, info4属性
  • 报告2:此图应该有id, name, info1, info2, info4属性
  • 报告[3 ..]说,很多其他的看法是可能的
 
private int id; 
    private String name; 
    private String info1; 
    private String info2; 
    //ignore if view=report2 
    @JsonView(ReportViews.Report2.class , include=false) 
    private String info3; 
    private String info4; 

我的用例是根据视图排除属性(或称为report-id)。使用JSONView方法,我需要将除了Report2之外的所有视图添加到info3属性以排除它。不适合。

在这种情况下应该采取什么正确的方法?定制的JSONView除了排除/包含将是正确的解决方案,如果不是已经可用的类似。

回答

1

杰克逊的JSON查看功能基于纳入标准,因此您无法更改现有标注。

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; 
+0

谢谢,右排斥是不能直接,我终于扩展'Jackson' functionlity支持我的自定义注解,样品用例之一是这样的:'@ReportView(烫发= {Permission.ShowX,权限。 ShowY,..},anyPerm = false | true,conditions =“reflectiveConditionMethod”,include = false | true)' – harsh