Skip to content

Commit af40adc

Browse files
committed
yet more tweaking
1 parent 99af0f1 commit af40adc

File tree

1 file changed

+16
-31
lines changed

1 file changed

+16
-31
lines changed

src/main/java/com/fasterxml/jackson/databind/ser/BasicSerializerFactory.java

Lines changed: 16 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -223,32 +223,30 @@ public JsonSerializer<Object> createKeySerializer(SerializerProvider ctxt,
223223
// [databind#2452]: Support `@JsonSerialize(keyUsing = ...)` -- new in 2.11
224224
ser = _findKeySerializer(ctxt, beanDesc.getClassInfo());
225225
if (ser == null) {
226+
// 02-Nov-2020, tatu: Handling of "default key serializer" is bit convoluted
227+
// (will be removed from 3.0) but for now it apparently needs to override
228+
// standard handlers so (for backwards compatibility)
226229
ser = defaultImpl;
227230
if (ser == null) {
231+
// Beyond that, we can check standard serializers as they are only for
232+
// JDK types and should not interfere with other annotations
228233
ser = StdKeySerializers.getStdKeySerializer(config, keyType.getRawClass(), false);
229-
// As per [databind#47], also need to support @JsonValue
230234
if (ser == null) {
231-
AnnotatedMember keyAm = beanDesc.findJsonKeyAccessor();
232-
if (keyAm != null) {
233-
JsonSerializer<?> delegate = createKeySerializer(ctxt, keyAm.getType(), defaultImpl);
235+
AnnotatedMember acc = beanDesc.findJsonKeyAccessor();
236+
if (acc == null) {
237+
// As per [databind#47], also need to support @JsonValue
238+
acc = beanDesc.findJsonValueAccessor();
239+
}
240+
if (acc != null) {
241+
JsonSerializer<?> delegate = createKeySerializer(ctxt, acc.getType(), defaultImpl);
234242
if (config.canOverrideAccessModifiers()) {
235-
ClassUtil.checkAndFixAccess(keyAm.getMember(),
243+
ClassUtil.checkAndFixAccess(acc.getMember(),
236244
config.isEnabled(MapperFeature.OVERRIDE_PUBLIC_ACCESS_MODIFIERS));
237245
}
238246
// null -> no TypeSerializer for key-serializer use case
239-
ser = new JsonValueSerializer(keyAm, null, delegate);
247+
ser = new JsonValueSerializer(acc, null, delegate);
240248
} else {
241-
AnnotatedMember am = beanDesc.findJsonValueAccessor();
242-
if (am != null) {
243-
JsonSerializer<?> delegate = createKeySerializer(ctxt, am.getType(), defaultImpl);
244-
if (config.canOverrideAccessModifiers()) {
245-
ClassUtil.checkAndFixAccess(am.getMember(),
246-
config.isEnabled(MapperFeature.OVERRIDE_PUBLIC_ACCESS_MODIFIERS));
247-
}
248-
ser = new JsonValueSerializer(am, null, delegate);
249-
} else {
250-
ser = StdKeySerializers.getFallbackKeySerializer(config, keyType.getRawClass());
251-
}
249+
ser = StdKeySerializers.getFallbackKeySerializer(config, keyType.getRawClass());
252250
}
253251
}
254252
}
@@ -264,7 +262,6 @@ public JsonSerializer<Object> createKeySerializer(SerializerProvider ctxt,
264262
return (JsonSerializer<Object>) ser;
265263
}
266264

267-
// Old method: to be removed from 3.0 -- similar to above but can't look for "keyUsing"
268265
@Override
269266
@SuppressWarnings("unchecked")
270267
@Deprecated // since 2.11
@@ -286,19 +283,7 @@ public JsonSerializer<Object> createKeySerializer(SerializationConfig config,
286283
if (ser == null) {
287284
ser = StdKeySerializers.getStdKeySerializer(config, keyType.getRawClass(), false);
288285
if (ser == null) {
289-
AnnotatedMember am = beanDesc.findJsonValueAccessor();
290-
if (am != null) {
291-
final Class<?> rawType = am.getRawType();
292-
JsonSerializer<?> delegate = StdKeySerializers.getStdKeySerializer(config,
293-
rawType, true);
294-
if (config.canOverrideAccessModifiers()) {
295-
ClassUtil.checkAndFixAccess(am.getMember(),
296-
config.isEnabled(MapperFeature.OVERRIDE_PUBLIC_ACCESS_MODIFIERS));
297-
}
298-
ser = new JsonValueSerializer(am, delegate);
299-
} else {
300-
ser = StdKeySerializers.getFallbackKeySerializer(config, keyType.getRawClass());
301-
}
286+
ser = StdKeySerializers.getFallbackKeySerializer(config, keyType.getRawClass());
302287
}
303288
}
304289
}

0 commit comments

Comments
 (0)