2012-12-04 9 views
5

Ho un caso d'uso in cui sembra più opportuno utilizzare JSONView annotazioni con informazioni esclusione, ad esempio:JSONView annotazioni con inclusione/esclusione attributo

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

Questo non è (comprendono attributo) direttamente supportato a Jackson (1.9.2) A partire da ora, mi chiedo se c'è una soluzione facile a Jackson per raggiungere questo obiettivo.

Caso d'uso:

  • Report1: Questo punto di vista dovrebbe avere id, name, info1, info2, info3, info4 attributi
  • Report2: Questo punto di vista dovrebbe avere id, name, info1, info2, info4 attributi
  • Report [3 ..] dicono molti altri punti di vista sono possibili
 
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; 

Il mio caso d'uso esclude gli attributi in base alle viste (o dice id-report). Con l'approccio JSONView ho bisogno di aggiungere tutte le viste all'attributo info3 tranne Report2 per farlo escludere. Non si adatta bene

Quale dovrebbe essere l'approccio corretto in questo scenario? La JSONView personalizzata ad eccezione dell'esclusione/inclusione sarebbe la soluzione giusta se non era già disponibile qualcosa di simile.

risposta

1

Le funzionalità di visualizzazione JSON di Jackson si basano sui criteri di inclusione, pertanto non è possibile modificare le annotazioni esistenti.

2

Non sembra essere un modo per escludere campi da una vista specifica in quel modo.

Tuttavia è possibile strutturare le viste in modo molto flessibile utilizzando le interfacce per comporre la vista dagli elementi necessari.

Nel caso di cui sopra vorrei provare questo:

public class ReportViews { 
    public interface NeedsInfo3 {}; 

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

Poi nel modello utilizza la visualizzazione specifica campo.

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

@JsonView(ReportViews.NeedsInfo3.class) 
private String info3; 
private String info4; 
+0

Grazie, l'esclusione a destra non è direttamente possibile, ho finalmente esteso 'functionlity Jackson' per sostenere la mia annotazione personalizzate, uno dei casi d'uso del campione è come:' @ReportView (permanenti = {Permission.ShowX, Autorizzazione. ShowY, ..}, anyPerm = false | true, conditions = "reflectiveConditionMethod", include = false | true) ' – harsh