|
10 | 10 | import com.fasterxml.jackson.databind.*;
|
11 | 11 | import com.fasterxml.jackson.databind.annotation.JsonSerialize;
|
12 | 12 | import com.fasterxml.jackson.databind.introspect.Annotated;
|
| 13 | +import com.fasterxml.jackson.databind.introspect.AnnotatedMember; |
13 | 14 | import com.fasterxml.jackson.databind.jsonFormatVisitors.JsonFormatVisitorWrapper;
|
14 | 15 | import com.fasterxml.jackson.databind.jsontype.TypeSerializer;
|
15 | 16 | import com.fasterxml.jackson.databind.ser.ContextualSerializer;
|
@@ -137,14 +138,17 @@ public JsonSerializer<?> createContextual(SerializerProvider provider,
|
137 | 138 | if (vts != null) {
|
138 | 139 | vts = vts.forProperty(property);
|
139 | 140 | }
|
140 |
| - JsonSerializer<?> ser = _valueSerializer; |
| 141 | + JsonSerializer<?> ser = findContentSerializer(provider, property); |
141 | 142 | if (ser == null) {
|
142 |
| - // A few conditions needed to be able to fetch serializer here: |
143 |
| - if (_useStatic(provider, property, _referredType)) { |
144 |
| - ser = _findSerializer(provider, _referredType, property); |
| 143 | + ser = _valueSerializer; |
| 144 | + if (ser == null) { |
| 145 | + // A few conditions needed to be able to fetch serializer here: |
| 146 | + if (_useStatic(provider, property, _referredType)) { |
| 147 | + ser = _findSerializer(provider, _referredType, property); |
| 148 | + } |
| 149 | + } else { |
| 150 | + ser = provider.handlePrimaryContextualization(ser, property); |
145 | 151 | }
|
146 |
| - } else { |
147 |
| - ser = provider.handlePrimaryContextualization(ser, property); |
148 | 152 | }
|
149 | 153 | // Also: may want to have more refined exclusion based on referenced value
|
150 | 154 | JsonInclude.Include contentIncl = _contentInclusion;
|
@@ -325,4 +329,24 @@ private final JsonSerializer<Object> _findSerializer(SerializerProvider provider
|
325 | 329 | {
|
326 | 330 | return provider.findTypedValueSerializer(type, true, prop);
|
327 | 331 | }
|
| 332 | + |
| 333 | + // !!! 22-Mar-2016, tatu: Method added in jackson-databind 2.7.4; may be used |
| 334 | + // when we go 2.8 |
| 335 | + protected JsonSerializer<?> findContentSerializer(SerializerProvider serializers, |
| 336 | + BeanProperty property) |
| 337 | + throws JsonMappingException |
| 338 | + { |
| 339 | + if (property != null) { |
| 340 | + // First: if we have a property, may have property-annotation overrides |
| 341 | + AnnotatedMember m = property.getMember(); |
| 342 | + final AnnotationIntrospector intr = serializers.getAnnotationIntrospector(); |
| 343 | + if (m != null) { |
| 344 | + Object serDef = intr.findContentSerializer(m); |
| 345 | + if (serDef != null) { |
| 346 | + return serializers.serializerInstance(m, serDef); |
| 347 | + } |
| 348 | + } |
| 349 | + } |
| 350 | + return null; |
| 351 | + } |
328 | 352 | }
|
0 commit comments