11package com .fasterxml .jackson .datatype .guava .ser ;
22
3+ import com .fasterxml .jackson .databind .AnnotationIntrospector ;
34import com .fasterxml .jackson .databind .BeanDescription ;
45import com .fasterxml .jackson .databind .SerializationConfig ;
6+ import com .fasterxml .jackson .databind .introspect .AnnotatedMember ;
57import com .fasterxml .jackson .databind .ser .BeanPropertyWriter ;
68import com .fasterxml .jackson .databind .ser .BeanSerializerModifier ;
9+ import com .fasterxml .jackson .databind .ser .impl .UnwrappingBeanPropertyWriter ;
10+ import com .fasterxml .jackson .databind .util .NameTransformer ;
711import com .google .common .base .Optional ;
812
913import java .io .Serializable ;
@@ -25,7 +29,15 @@ public List<BeanPropertyWriter> changeProperties(SerializationConfig config,
2529 for (int i = 0 ; i < beanProperties .size (); ++i ) {
2630 final BeanPropertyWriter writer = beanProperties .get (i );
2731 if (Optional .class .isAssignableFrom (writer .getType ().getRawClass ())) {
28- beanProperties .set (i , new GuavaOptionalBeanPropertyWriter (writer ));
32+ // Since 2.17: Added to preserve UnwrappingBeanProperty name transformer.
33+ if (writer instanceof UnwrappingBeanPropertyWriter ) {
34+ final AnnotatedMember member = writer .getMember ();
35+ final AnnotationIntrospector intr = config .getAnnotationIntrospector ();
36+ final NameTransformer unwrapper = intr .findUnwrappingNameTransformer (member );
37+ beanProperties .set (i , new GuavaUnwrappingOptionalBeanPropertyWriter (writer , unwrapper ));
38+ } else {
39+ beanProperties .set (i , new GuavaOptionalBeanPropertyWriter (writer ));
40+ }
2941 }
3042 }
3143 return beanProperties ;
0 commit comments