diff --git a/guava/src/main/java/com/fasterxml/jackson/datatype/guava/ser/GuavaBeanSerializerModifier.java b/guava/src/main/java/com/fasterxml/jackson/datatype/guava/ser/GuavaBeanSerializerModifier.java index 90250566..19f5180d 100644 --- a/guava/src/main/java/com/fasterxml/jackson/datatype/guava/ser/GuavaBeanSerializerModifier.java +++ b/guava/src/main/java/com/fasterxml/jackson/datatype/guava/ser/GuavaBeanSerializerModifier.java @@ -1,9 +1,13 @@ package com.fasterxml.jackson.datatype.guava.ser; +import com.fasterxml.jackson.databind.AnnotationIntrospector; import com.fasterxml.jackson.databind.BeanDescription; import com.fasterxml.jackson.databind.SerializationConfig; +import com.fasterxml.jackson.databind.introspect.AnnotatedMember; import com.fasterxml.jackson.databind.ser.BeanPropertyWriter; import com.fasterxml.jackson.databind.ser.BeanSerializerModifier; +import com.fasterxml.jackson.databind.ser.impl.UnwrappingBeanPropertyWriter; +import com.fasterxml.jackson.databind.util.NameTransformer; import com.google.common.base.Optional; import java.io.Serializable; @@ -25,7 +29,15 @@ public List changeProperties(SerializationConfig config, for (int i = 0; i < beanProperties.size(); ++i) { final BeanPropertyWriter writer = beanProperties.get(i); if (Optional.class.isAssignableFrom(writer.getType().getRawClass())) { - beanProperties.set(i, new GuavaOptionalBeanPropertyWriter(writer)); + // Since 2.17: Added to preserve UnwrappingBeanProperty name transformer. + if (writer instanceof UnwrappingBeanPropertyWriter) { + final AnnotatedMember member = writer.getMember(); + final AnnotationIntrospector intr = config.getAnnotationIntrospector(); + final NameTransformer unwrapper = intr.findUnwrappingNameTransformer(member); + beanProperties.set(i, new GuavaUnwrappingOptionalBeanPropertyWriter(writer, unwrapper)); + } else { + beanProperties.set(i, new GuavaOptionalBeanPropertyWriter(writer)); + } } } return beanProperties;