Skip to content

Commit 4a28397

Browse files
committed
Merge pull request #951 from bimargulies/additional-key-test-case
Additional test case for dynamic key serialization.
2 parents 9566ea8 + bce671d commit 4a28397

File tree

1 file changed

+34
-0
lines changed

1 file changed

+34
-0
lines changed

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

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,12 @@
77
import com.fasterxml.jackson.core.JsonGenerator;
88
import com.fasterxml.jackson.core.type.TypeReference;
99
import com.fasterxml.jackson.databind.*;
10+
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
1011
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
1112
import com.fasterxml.jackson.databind.jsontype.TypeResolverBuilder;
1213
import com.fasterxml.jackson.databind.module.SimpleModule;
14+
import com.fasterxml.jackson.databind.module.SimpleSerializers;
15+
import org.junit.Test;
1316

1417
public class TestKeySerializers extends BaseMapTest
1518
{
@@ -141,6 +144,37 @@ public void testCustomForEnum() throws IOException
141144
assertEquals("{\"stuff\":{\"xxxB\":\"bar\"}}", json);
142145
}
143146

147+
@JsonSerialize(keyUsing = ABCKeySerializer.class)
148+
public static enum ABCMixin { }
149+
150+
public static enum Outer {
151+
inner;
152+
}
153+
154+
public void testCustomEnumInnerMapKey() {
155+
Map<Outer, Object> outerMap = new HashMap<Outer, Object>();
156+
Map<ABC, Map<String, String>> map = new EnumMap<ABC, Map<String, String>>(ABC.class);
157+
Map<String, String> innerMap = new HashMap<String, String>();
158+
innerMap.put("one", "1");
159+
map.put(ABC.A, innerMap);
160+
outerMap.put(Outer.inner, map);
161+
final ObjectMapper mapper = new ObjectMapper();
162+
SimpleModule mod = new SimpleModule("test") {
163+
@Override
164+
public void setupModule(SetupContext context) {
165+
context.setMixInAnnotations(ABC.class, ABCMixin.class);
166+
SimpleSerializers keySerializers = new SimpleSerializers();
167+
keySerializers.addSerializer(ABC.class, new ABCKeySerializer());
168+
context.addKeySerializers(keySerializers);
169+
}
170+
};
171+
mapper.registerModule(mod);
172+
JsonNode tree = mapper.convertValue(outerMap, JsonNode.class);
173+
JsonNode innerNode = tree.get("inner");
174+
String key = innerNode.fieldNames().next();
175+
assertEquals("xxxA", key);
176+
}
177+
144178
// [databind#838]
145179
public void testUnWrappedMapWithDefaultType() throws Exception{
146180
final ObjectMapper mapper = new ObjectMapper();

0 commit comments

Comments
 (0)