Skip to content

Commit 934f485

Browse files
committed
Fixed #1570
1 parent d892303 commit 934f485

File tree

4 files changed

+35
-10
lines changed

4 files changed

+35
-10
lines changed

release-notes/VERSION

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ Project: jackson-databind
99
#1533: `AsPropertyTypeDeserializer` ignores `DeserializationFeature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT`
1010
#1543: JsonFormat.Shape.NUMBER_INT does not work when defined on enum type in 2.8
1111
(reported by Alex P)
12+
#1570: `Enum` key for `Map` ignores `SerializationFeature.WRITE_ENUMS_USING_INDEX`
13+
(reported by SolaKun@github)
1214
#1575: Problem with `@JsonIgnoreProperties` on recursive property (regression in 2.8)
1315
(reported by anujkumar04@github)
1416
- Minor fix to creation of `PropertyMetadata`, had one path that could lead to NPE

src/main/java/com/fasterxml/jackson/databind/ser/std/StdKeySerializer.java

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,12 +31,15 @@ public void serialize(Object value, JsonGenerator g, SerializerProvider provider
3131
} else if (cls.isEnum()) {
3232
// 24-Sep-2015, tatu: Minor improvement over older (2.6.2 and before) code: at least
3333
// use name/toString() variation for as per configuration
34-
Enum<?> en = (Enum<?>) value;
35-
3634
if (provider.isEnabled(SerializationFeature.WRITE_ENUMS_USING_TO_STRING)) {
37-
str = en.toString();
35+
str = value.toString();
3836
} else {
39-
str = en.name();
37+
Enum<?> en = (Enum<?>) value;
38+
if (provider.isEnabled(SerializationFeature.WRITE_ENUMS_USING_TO_STRING)) {
39+
str = String.valueOf(en.ordinal());
40+
} else {
41+
str = en.name();
42+
}
4043
}
4144
} else if (value instanceof Date) {
4245
provider.defaultSerializeDateKey((Date) value, g);

src/main/java/com/fasterxml/jackson/databind/ser/std/StdKeySerializers.java

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -144,9 +144,19 @@ public void serialize(Object value, JsonGenerator g, SerializerProvider provider
144144
break;
145145
case TYPE_ENUM:
146146
{
147-
String str = provider.isEnabled(SerializationFeature.WRITE_ENUMS_USING_TO_STRING)
148-
? value.toString() : ((Enum<?>) value).name();
149-
g.writeFieldName(str);
147+
String key;
148+
149+
if (provider.isEnabled(SerializationFeature.WRITE_ENUMS_USING_TO_STRING)) {
150+
key = value.toString();
151+
} else {
152+
Enum<?> e = (Enum<?>) value;
153+
if (provider.isEnabled(SerializationFeature.WRITE_ENUMS_USING_INDEX)) {
154+
key = String.valueOf(e.ordinal());
155+
} else {
156+
key = e.name();
157+
}
158+
}
159+
g.writeFieldName(key);
150160
}
151161
break;
152162
case TYPE_TO_STRING:
@@ -250,6 +260,10 @@ public void serialize(Object value, JsonGenerator g, SerializerProvider serializ
250260
return;
251261
}
252262
Enum<?> en = (Enum<?>) value;
263+
if (serializers.isEnabled(SerializationFeature.WRITE_ENUMS_USING_INDEX)) {
264+
g.writeFieldName(String.valueOf(en.ordinal()));
265+
return;
266+
}
253267
g.writeFieldName(_values.serializedValueFor(en));
254268
}
255269
}

src/test/java/com/fasterxml/jackson/databind/ser/TestEnumSerialization.java

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -281,11 +281,17 @@ public void testMapWithEnumKeys() throws Exception
281281
String json = MAPPER.writeValueAsString(bean);
282282
assertEquals("{\"map\":{\"B\":3}}", json);
283283

284-
ObjectMapper m2 = new ObjectMapper();
285284
// but can change
286-
m2.enable(SerializationFeature.WRITE_ENUMS_USING_TO_STRING);
287-
json = m2.writeValueAsString(bean);
285+
json = MAPPER.writer()
286+
.with(SerializationFeature.WRITE_ENUMS_USING_TO_STRING)
287+
.writeValueAsString(bean);
288288
assertEquals("{\"map\":{\"b\":3}}", json);
289+
290+
// [databind#1570]
291+
json = MAPPER.writer()
292+
.with(SerializationFeature.WRITE_ENUMS_USING_INDEX)
293+
.writeValueAsString(bean);
294+
assertEquals(aposToQuotes("{'map':{'"+TestEnum.B.ordinal()+"':3}}"), json);
289295
}
290296

291297
public void testAsIndex() throws Exception

0 commit comments

Comments
 (0)