1
1
package com .fasterxml .jackson .datatype .guava .ser ;
2
2
3
+ import com .fasterxml .jackson .databind .AnnotationIntrospector ;
3
4
import com .fasterxml .jackson .databind .BeanDescription ;
4
5
import com .fasterxml .jackson .databind .SerializationConfig ;
6
+ import com .fasterxml .jackson .databind .introspect .AnnotatedMember ;
5
7
import com .fasterxml .jackson .databind .ser .BeanPropertyWriter ;
6
8
import com .fasterxml .jackson .databind .ser .BeanSerializerModifier ;
9
+ import com .fasterxml .jackson .databind .ser .impl .UnwrappingBeanPropertyWriter ;
10
+ import com .fasterxml .jackson .databind .util .NameTransformer ;
7
11
import com .google .common .base .Optional ;
8
12
9
13
import java .io .Serializable ;
@@ -25,7 +29,15 @@ public List<BeanPropertyWriter> changeProperties(SerializationConfig config,
25
29
for (int i = 0 ; i < beanProperties .size (); ++i ) {
26
30
final BeanPropertyWriter writer = beanProperties .get (i );
27
31
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
+ }
29
41
}
30
42
}
31
43
return beanProperties ;
0 commit comments