@@ -223,32 +223,30 @@ public JsonSerializer<Object> createKeySerializer(SerializerProvider ctxt,
223
223
// [databind#2452]: Support `@JsonSerialize(keyUsing = ...)` -- new in 2.11
224
224
ser = _findKeySerializer (ctxt , beanDesc .getClassInfo ());
225
225
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)
226
229
ser = defaultImpl ;
227
230
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
228
233
ser = StdKeySerializers .getStdKeySerializer (config , keyType .getRawClass (), false );
229
- // As per [databind#47], also need to support @JsonValue
230
234
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 );
234
242
if (config .canOverrideAccessModifiers ()) {
235
- ClassUtil .checkAndFixAccess (keyAm .getMember (),
243
+ ClassUtil .checkAndFixAccess (acc .getMember (),
236
244
config .isEnabled (MapperFeature .OVERRIDE_PUBLIC_ACCESS_MODIFIERS ));
237
245
}
238
246
// null -> no TypeSerializer for key-serializer use case
239
- ser = new JsonValueSerializer (keyAm , null , delegate );
247
+ ser = new JsonValueSerializer (acc , null , delegate );
240
248
} 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 ());
252
250
}
253
251
}
254
252
}
@@ -264,7 +262,6 @@ public JsonSerializer<Object> createKeySerializer(SerializerProvider ctxt,
264
262
return (JsonSerializer <Object >) ser ;
265
263
}
266
264
267
- // Old method: to be removed from 3.0 -- similar to above but can't look for "keyUsing"
268
265
@ Override
269
266
@ SuppressWarnings ("unchecked" )
270
267
@ Deprecated // since 2.11
@@ -286,19 +283,7 @@ public JsonSerializer<Object> createKeySerializer(SerializationConfig config,
286
283
if (ser == null ) {
287
284
ser = StdKeySerializers .getStdKeySerializer (config , keyType .getRawClass (), false );
288
285
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 ());
302
287
}
303
288
}
304
289
}
0 commit comments