| package org.codehaus.jackson.failing; |
| |
| import java.io.IOException; |
| import java.util.Collections; |
| import java.util.HashMap; |
| import java.util.Map; |
| |
| import org.codehaus.jackson.JsonGenerator; |
| import org.codehaus.jackson.annotate.JsonCreator; |
| import org.codehaus.jackson.annotate.JsonProperty; |
| import org.codehaus.jackson.map.*; |
| import org.codehaus.jackson.map.annotate.JsonDeserialize; |
| import org.codehaus.jackson.map.annotate.JsonSerialize; |
| |
| public class TestCustomMapKeySerializer extends BaseMapTest |
| { |
| // [JACKSON-882] |
| public static class CustomKey { |
| private final int id; |
| |
| public CustomKey(int id) {this.id = id;} |
| |
| public int getId() { return id; } |
| } |
| |
| public static class Model |
| { |
| private final Map<CustomKey, String> map; |
| |
| @JsonCreator |
| public Model(@JsonProperty("map") @JsonDeserialize(keyUsing = CustomKeyDeserializer.class) Map<CustomKey, String> map) |
| { |
| this.map = new HashMap<CustomKey, String>(map); |
| } |
| |
| @JsonProperty |
| @JsonSerialize(keyUsing = CustomKeySerializer.class) |
| public Map<CustomKey, String> getMap() { |
| return map; |
| } |
| } |
| |
| static class CustomKeySerializer extends JsonSerializer<CustomKey> { |
| @Override |
| public void serialize(CustomKey value, JsonGenerator jgen, SerializerProvider provider) throws IOException { |
| jgen.writeFieldName(String.valueOf(value.getId())); |
| } |
| } |
| |
| static class CustomKeyDeserializer extends KeyDeserializer { |
| @Override |
| public CustomKey deserializeKey(String key, DeserializationContext ctxt) throws IOException { |
| return new CustomKey(Integer.valueOf(key)); |
| } |
| } |
| |
| /* |
| /********************************************************** |
| /* Test methods |
| /********************************************************** |
| */ |
| |
| public void testIssue882() throws Exception |
| { |
| Model original = new Model(Collections.singletonMap(new CustomKey(123), "test")); |
| ObjectMapper mapper = new ObjectMapper(); |
| String json = mapper.writeValueAsString(original); |
| Model deserialized = mapper.readValue(json, Model.class); |
| |
| System.out.println(original.getMap().equals(deserialized.getMap())); |
| } |
| |
| } |