2014-05-05 17 views
17

Mam ten kod w klasie o nazwie Project:Jak Jackson ignorować metodę get() podczas szeregowania obiektu

@Transient 
public List<Release> getAllReleases() { 
    List<Release> releases = new ArrayList<Release>(); 
    ... 
    return releases; 
} 

Gdy przedmiotem projektu jest szeregowane metodę getAllReleases() nazywa i pole allReleases zostanie dodany do serializowanego obiektu.

Jeśli dodaję @JsonIgnore przed metodą, otrzymam taki sam wynik. Zastanawiam się, w jaki sposób mogę zaimplementować metodę getFoo(), która jest ignorowana przez Jacksona podczas serializacji obiektu.

Ewentualnie mogę zrobić:

static public List<Release> getAllReleases(Project proj) { 
    List<Release> releases = new ArrayList<Release>(); 
    ... 
    return releases; 
} 

ale rozwiązanie wygląda nieco brzydki, i jestem prawie pewien, że musi być jakiś prostszy mechanizm przewidziany przez Jacksona.

Czy brakuje mi czegoś? TIA

Odpowiedz

25

Jeśli zaznaczysz metodę getter z @JsonIgnore adnotacją, że nie powinno być serializowane. Oto przykład:

public class JacksonIgnore { 

    public static class Release { 
     public final String version; 

     public Release(String version) { 
      this.version = version; 
     } 
    } 
    public static class Project { 
     public final String name; 

     public Project(String name) { 
      this.name = name; 
     } 

     @JsonIgnore 
     public List<Release> getAllReleases() { 
      return Arrays.asList(new Release("r1"), new Release("r2")); 
     } 
    } 

    public static void main(String[] args) throws JsonProcessingException { 
     ObjectMapper mapper = new ObjectMapper(); 
     System.out.println(mapper.writerWithDefaultPrettyPrinter().writeValueAsString(new Project("test"))); 
    } 
} 

wyjściowa:

{ 
    "name" : "test" 
} 
+2

Walcząc z zależnościami, wygląda jak mój projekt jest przy użyciu zarówno jackson1 (org.codehaus.jackson) i jackson2 (com.fasterxml.jackson), a wydają się być w konflikcie. Kontroler REST najwyraźniej używa jackson1 i ignoruje adnotacje używane w modelu. – NoUserFound

Powiązane problemy