| package com.fasterxml.jackson.databind.ser.jdk; |
| |
| import java.io.IOException; |
| import java.util.HashMap; |
| import java.util.LinkedHashMap; |
| import java.util.Map; |
| |
| import com.fasterxml.jackson.annotation.JsonCreator; |
| import com.fasterxml.jackson.annotation.JsonValue; |
| import com.fasterxml.jackson.core.Base64Variants; |
| import com.fasterxml.jackson.core.JsonGenerator; |
| import com.fasterxml.jackson.databind.*; |
| |
| @SuppressWarnings("serial") |
| public class MapKeySerializationTest extends BaseMapTest |
| { |
| // for [databind#47] |
| public static class Wat |
| { |
| private final String wat; |
| |
| @JsonCreator |
| Wat(String wat) { |
| this.wat = wat; |
| } |
| |
| @JsonValue |
| public String getWat() { |
| return wat; |
| } |
| |
| @Override |
| public String toString() { |
| return "(String)[Wat: " + wat + "]"; |
| } |
| } |
| |
| static class WatMap extends HashMap<Wat,Boolean> { } |
| |
| static class DefaultKeySerializer extends JsonSerializer<Object> |
| { |
| @Override |
| public void serialize(Object value, JsonGenerator g, SerializerProvider provider) throws IOException |
| { |
| g.writeFieldName("DEFAULT:"+value); |
| } |
| } |
| |
| /* |
| /********************************************************** |
| /* Test methods |
| /********************************************************** |
| */ |
| |
| final private ObjectMapper MAPPER = objectMapper(); |
| |
| // [databind#47] |
| public void testMapJsonValueKey47() throws Exception |
| { |
| WatMap input = new WatMap(); |
| input.put(new Wat("3"), true); |
| |
| String json = MAPPER.writeValueAsString(input); |
| assertEquals(aposToQuotes("{'3':true}"), json); |
| } |
| |
| // [databind#682] |
| public void testClassKey() throws IOException |
| { |
| Map<Class<?>,Integer> map = new LinkedHashMap<Class<?>,Integer>(); |
| map.put(String.class, 2); |
| String json = MAPPER.writeValueAsString(map); |
| assertEquals(aposToQuotes("{'java.lang.String':2}"), json); |
| } |
| |
| public void testDefaultKeySerializer() throws IOException |
| { |
| ObjectMapper m = new ObjectMapper(); |
| m.getSerializerProvider().setDefaultKeySerializer(new DefaultKeySerializer()); |
| Map<String,String> map = new HashMap<String,String>(); |
| map.put("a", "b"); |
| assertEquals("{\"DEFAULT:a\":\"b\"}", m.writeValueAsString(map)); |
| } |
| |
| // [databind#1552] |
| public void testMapsWithBinaryKeys() throws Exception |
| { |
| byte[] binary = new byte[] { 1, 2, 3, 4, 5 }; |
| |
| // First, using wrapper |
| MapWrapper<byte[], String> input = new MapWrapper<>(binary, "stuff"); |
| String expBase64 = Base64Variants.MIME.encode(binary); |
| |
| assertEquals(aposToQuotes("{'map':{'"+expBase64+"':'stuff'}}"), |
| MAPPER.writeValueAsString(input)); |
| |
| // and then dynamically.. |
| Map<byte[],String> map = new LinkedHashMap<>(); |
| map.put(binary, "xyz"); |
| assertEquals(aposToQuotes("{'"+expBase64+"':'xyz'}"), |
| MAPPER.writeValueAsString(map)); |
| } |
| } |