2012-12-04 105 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