Created
October 20, 2015 22:50
-
-
Save charlouze/b11c0a56450a23f6b1e2 to your computer and use it in GitHub Desktop.
This gists shows how to add a listener for bean serialization in jackson.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public interface BeanSerializerListener { | |
void postSerialization(Object value, JsonGenerator jgen) throws IOException; | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public class MyBeanSerializer extends BeanSerializerBase { | |
private final BeanSerializerListener serializerListener; | |
protected MyBeanSerializer(final BeanSerializerBase src) { | |
super(src); | |
this.serializerListener = serializerListener; | |
} | |
@Override | |
public void serialize(final Object bean, final JsonGenerator jgen, final SerializerProvider provider) throws IOException, JsonGenerationException { | |
jgen.writeStartObject(); | |
if (_propertyFilterId != null) { | |
serializeFieldsFiltered(bean, jgen, provider); | |
} else { | |
serializeFields(bean, jgen, provider); | |
} | |
serializerListener.postSerialization(bean, jgen); | |
jgen.writeEndObject(); | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public class MyBeanSerializerBuilder extends BeanSerializerBuilder { | |
private final BeanSerializerListener serializerListener; | |
public MyBeanSerializerBuilder(final BasicBeanDescription beanDesc, final BeanSerializerListener serializerListener) { | |
super(beanDesc); | |
this.serializerListener = serializerListener; | |
} | |
@Override | |
public JsonSerializer<?> build() { | |
BeanSerializerBase src = (BeanSerializerBase) super.build(); | |
return new MyBeanSerializer(src, serializerListener); | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public class MyBeanSerializerFactory extends BeanSerializerFactory { | |
private final BeanSerializerListener serializerListener; | |
public MyBeanSerializerFactory(final BeanSerializerListener serializerListener) { | |
super(null); | |
this.serializerListener = serializerListener; | |
} | |
@Override | |
protected BeanSerializerBuilder constructBeanSerializerBuilder(final BasicBeanDescription beanDesc) { | |
return new MyBeanSerializerBuilder(beanDesc, serializerListener); | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@Provider | |
public class ObjectMapperProvider implements ContextResolver<ObjectMapper> { | |
private final MapperConfigurator mapperCfg; | |
public ObjectMapperProvider() { | |
mapperCfg = new MapperConfigurator(null, null); | |
mapperCfg.setAnnotationsToUse(new Annotations[]{Annotations.JACKSON, Annotations.JAXB}); | |
mapperCfg.getConfiguredMapper().setSerializerFactory(serializerFactory); | |
} | |
@Override | |
public ObjectMapper getContext(final Class<?> type) { | |
return mapperCfg.getConfiguredMapper(); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment