2012-08-06 11 views
5

Ho un oggetto che vorrei serializzare con un attributo in una parte del mio programma, ma senza in una parte diversa. Ho anche un ObjectMapper che è ampiamente personalizzato che utilizzo per entrambe le serializzazioni. La mia prima inclinazione era quella di usare un Mixin per modificare se l'attributo è mostrato, ma sembra che si possano mettere solo quelli su ObjectMapper e non su un lettore restituito da ObjectMapper. Fondamentalmente il codice che vorrei poter scrivere sarebbe il seguente.Come aggiungere un missaggio Jackson a un lettore e non all'oggetto objectmapper?

ObjectMapper myMapper = new ObjectMapper(); // in reality there is a lot of customization 
Foo foo = myMapper.reader().withMixin(Foo.class, FooMixin.class).readValue(jsonParser, Foo.class); 

risposta

5

corretta. Tuttavia, non è possibile modificare al volo i mix-in: poiché vengono utilizzati per l'introspezione dei (de) serializzatori e i risultati (effettivi (de) serializzatori) vengono memorizzati nella cache, devono essere aggiunti come parte della configurazione iniziale. Questo è il motivo per cui né ObjectReaderObjectWriter espongono i metodi per modificare i mix-in: consentono solo la modifica delle cose che possono essere modificate dinamicamente, in base alla chiamata.

Ma forse i mix-in non sono il modo migliore per farlo: hai preso in considerazione l'utilizzo di JSON Views? La visualizzazione attiva in uso può essere modificata separatamente per ciascuna (de) serializzazione.

3

In realtà, è possibile configurare mixins per la serializzazione o deserializzazione (o entrambi ovviamente):

objectMapper.getSerializationConfig().addMixInAnnotations(Rectangle.class, MixIn.class); 
objectMapper.getDeserializationConfig().addMixInAnnotations(Rectangle.class, MixIn.class); 

http://wiki.fasterxml.com/JacksonMixInAnnotations

Problemi correlati