I have written a custom JsonSerializer to allow overriding of json views using a custom @JsonViewOverride annotation. Everything is working as expected except for 1 minor detail. Properties with null values are not being serialized. I have the default settings for @JsonInclude and have tried to add the annotation @JsonInclude(JsonInclude.Include.ALWAYS) .
If I don't register my BeanSerializerModifier, @Jsoninclude annotation is used. Any ideas why this might be happening and how to fix it? Serializer.class public class JsonViewOverrideSerializer extends JsonSerializer implements ContextualSerializer { private final JsonSerializer beanSerializer; private final Class overrideView; public JsonViewOverrideSerializer(JsonSerializer<?> serializer) { this(serializer, null); } public JsonViewOverrideSerializer(JsonSerializer<?> serializer, Class<?> overrideView) { this.beanSerializer = serializer; this.overrideView = overrideView; } @Override public void serialize(Object value, JsonGenerator gen, SerializerProvider provider) throws IOException { SerializerProvider effectiveProvider = provider; if (overrideView != provider.getActiveView()) { effectiveProvider = overrideProvider(overrideView, gen, provider); } beanSerializer.serialize(value, gen, effectiveProvider); } private SerializerProvider overrideProvider(Class<?> overrideView, JsonGenerator gen, SerializerProvider provider) { return ((DefaultSerializerProvider) provider).createInstance(provider.getConfig().withView(overrideView), ((ObjectMapper) gen.getCodec()).getSerializerFactory()); } @Override public JsonSerializer<?> createContextual(SerializerProvider prov, BeanProperty property) throws JsonMappingException { JsonSerializer<?> serializer = this.beanSerializer; if (serializer instanceof ContextualSerializer) { serializer = ((ContextualSerializer) serializer).createContextual(prov, property); } if (property != null) { JsonViewOverride jsonViewOverride = property.getAnnotation(JsonViewOverride.class); if (jsonViewOverride != null) { Class<?> jsonView = jsonViewOverride.value(); serializer = new JsonViewOverrideSerializer(serializer, jsonView); } } return serializer; } } BeanSerializerModifier: public class MySerializerModifier extends BeanSerializerModifier { @Override public JsonSerializer<?> modifySerializer(SerializationConfig config, BeanDescription beanDesc, JsonSerializer<?> serializer) { return new JsonViewOverrideSerializer(serializer); } } ObjectMapper: public SpringObjectMapper() { Hibernate5Module hm = new Hibernate5Module(); hm.configure(Hibernate5Module.Feature.USE_TRANSIENT_ANNOTATION, false); this.registerModule(hm); this.enable(SerializationFeature.INDENT_OUTPUT); this.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")); this.registerModule( new SimpleModule() .setSerializerModifier(new FimsSerializerModifier()) ); } -- You received this message because you are subscribed to the Google Groups "jackson-user" group. To unsubscribe from this group and stop receiving emails from it, send an email to jackson-user+unsubscr...@googlegroups.com. To post to this group, send email to jackson-user@googlegroups.com. For more options, visit https://groups.google.com/d/optout.