• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 package com.fasterxml.jackson.databind.seq;
2 
3 import java.io.IOException;
4 import java.util.HashMap;
5 import java.util.Map;
6 
7 import org.junit.Assert;
8 
9 import com.fasterxml.jackson.core.JsonGenerator;
10 import com.fasterxml.jackson.core.JsonProcessingException;
11 import com.fasterxml.jackson.core.type.TypeReference;
12 import com.fasterxml.jackson.databind.*;
13 import com.fasterxml.jackson.databind.module.SimpleModule;
14 import com.fasterxml.jackson.databind.testutil.NoCheckSubTypeValidator;
15 
16 // for [databind#827]
17 public class PolyMapWriter827Test extends BaseMapTest
18 {
19     static class CustomKey {
20         String a;
21         int b;
22 
23         @Override
toString()24         public String toString() { return "BAD-KEY"; }
25     }
26 
27     public class CustomKeySerializer extends JsonSerializer<CustomKey> {
28         @Override
serialize(CustomKey key, JsonGenerator jsonGenerator, SerializerProvider serializerProvider)29         public void serialize(CustomKey key, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException, JsonProcessingException {
30             jsonGenerator.writeFieldName(key.a + "," + key.b);
31         }
32     }
33 
testPolyCustomKeySerializer()34     public void testPolyCustomKeySerializer() throws Exception
35     {
36         ObjectMapper mapper = new ObjectMapper();
37         mapper.activateDefaultTyping(NoCheckSubTypeValidator.instance,
38                 ObjectMapper.DefaultTyping.NON_FINAL);
39 
40         mapper.registerModule(new SimpleModule("keySerializerModule")
41             .addKeySerializer(CustomKey.class, new CustomKeySerializer()));
42 
43         Map<CustomKey, String> map = new HashMap<CustomKey, String>();
44         CustomKey key = new CustomKey();
45         key.a = "foo";
46         key.b = 1;
47         map.put(key, "bar");
48 
49         final ObjectWriter writer = mapper.writerFor(new TypeReference<Map<CustomKey,String>>() { });
50         String json = writer.writeValueAsString(map);
51         Assert.assertEquals("[\"java.util.HashMap\",{\"foo,1\":\"bar\"}]", json);
52     }
53 }
54