2012-12-04 11 views
5

Mam przypadku użycia, gdzie wydaje się bardziej właściwe wykorzystanie JSONView adnotację z informacją o wykluczeniach, na przykład:JSONView adnotacja z włączenia/wyłączenia atrybut

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

To nie jest (to atrybut) bezpośrednio obsługiwany w Jackson (1.9.2) od teraz zastanawiam się, czy w Jackson jest łatwe obejście tego problemu.

przypadków użycia:

  • raportu1: Pogląd ten powinien mieć id, name, info1, info2, info3, info4 atrybuty
  • sprawozdania2: Pogląd ten powinien mieć id, name, info1, info2, info4 atrybuty
  • raport [3 ..] Say wiele innych widoki są możliwe
 
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; 

Mój przypadek użycia wyklucza atrybuty oparte na widokach (lub powiedzmy identyfikatory raportów). Przy podejściu JSONView muszę dodać wszystkie widoki do atrybutu info3 z wyjątkiem Report2, aby go wykluczyć. Nie pasuje dobrze.

Jakie powinny być właściwe podejście w tym scenariuszu? Jest dostosowane JSONView do wykluczenia/włączenia byłoby dobrym rozwiązaniem, jeśli nie jest coś podobnego już dostępne.

Odpowiedz

1

Jacksona JSON Zobacz funkcjonalność jest na podstawie kryteriów włączenia, więc nie można zmienić istniejące adnotacje.

2

Tam nie wydaje się być sposób, aby wykluczyć z pola widzenia określonego w ten sposób.

Jednak można uporządkować swoje poglądy bardzo elastycznie za pomocą interfejsów komponować widok z potrzebnych elementów.

W powyższym przypadku chciałbym spróbować to:

public class ReportViews { 
    public interface NeedsInfo3 {}; 

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

Następnie w modelu korzystania z konkretnego pole widzenia.

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

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

Dzięki, prawo wyłączenie nie jest możliwe bezpośrednio, ale w końcu rozszerzona 'Jackson' functionlity wspierać moje niestandardowe adnotacji, jeden przypadek użycia próbka jest tak:' @ReportView (perms = {Permission.ShowX, zgody. ShowY, ..}, anyPerm = false | true, conditions = "reflectiveConditionMethod", include = false | true) ' – harsh