Java >> Java tutorial >  >> Tag >> transient

Hvordan serialiseres forbigående felter ved hjælp af Jackson?

Min løsning med Jackson 2.4.3:

  private static final ObjectMapper mapper =
        new ObjectMapper(){{

            Hibernate4Module module = new Hibernate4Module();
            module.disable(Hibernate4Module.Feature.USE_TRANSIENT_ANNOTATION);
            registerModule(module);

        }};

Jeg tror ikke, at Jackson understøtter nogen form for konfiguration for at sætte den i stand til at serialisere et forbigående felt. Der er et åbent problem med at tilføje denne funktion, men den er gammel og er ikke blevet behandlet (så vidt jeg kan se):http://jira.codehaus.org/browse/JACKSON-623

Så mit spørgsmål er:Er der en måde at sætte jackson op til at serialisere alle objektfelterne på? inkludere forbigående.

Så for at besvare dit spørgsmål, nej.

Nogle andre Java JSON-værktøjer, såsom GSON understøtter en konfigurationsmulighed til at serialisere forbigående felter. Hvis du kan bruge et andet værktøj, kan du måske undersøge det (for GSON, se:https://sites.google.com/site/gson/gson-user-guide).

For at udvide lidt, kan du prøve en anden tilgang.

For det første bør du ikke prøve at serialisere et forbigående felt. Når alt kommer til alt er definitionen af ​​forbigående "lad være med at serialisere dette." Ikke desto mindre kan jeg komme i tanke om et par specifikke situationer, hvor det kan være nødvendigt, eller i det mindste praktisk (som når du arbejder med kode, du ikke kan ændre eller sådan). Alligevel, i 99% af tilfældene er svaret, lad være med at gøre det. Skift feltet, så det ikke er forbigående, hvis du skal serialisere det. Hvis du har flere kontekster, hvor du bruger det samme felt, og du vil have det serialiseret i et (f.eks. JSON) og ikke serialiseret i et andet (f.eks. java.io), så skal du oprette en brugerdefineret serializer til det tilfælde, hvor du ikke ønsker det, i stedet for at misbruge søgeordet.

For det andet, med hensyn til at bruge en getter og have "nogle gettere, der ændrer objektets tilstand", bør du også prøve at undgå det. Det kan føre til forskellige utilsigtede konsekvenser. Og teknisk set er det ikke en getter, det er en setter. Hvad jeg mener er, at hvis det muterer tilstand, har du en mutator (setter) i stedet for accessor (getter), selvom du navngiver den efter "get"-konventionen og returnerer nogle ting.


Java tag