blob: 06351296160343ea3370eee2ac8fb5e41e80696b (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
|
package com.fasterxml.jackson.databind.jsontype;
import java.util.*;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.*;
import com.fasterxml.jackson.databind.module.SimpleAbstractTypeResolver;
import com.fasterxml.jackson.databind.module.SimpleModule;
@SuppressWarnings("rawtypes")
public class TypeResolverTest extends BaseMapTest
{
static class A {
private Map map;
@JsonCreator
public A(@JsonProperty("z") Map<String, B> map) {
this.map = map;
}
public Map getMap() {
return map;
}
}
static class B {
int a;
public B(@JsonProperty("a") int a) {
this.a = a;
}
}
@SuppressWarnings("serial")
static class MyMap<K,V> extends HashMap<K,V> { }
public static void testSubtypeResolution() throws Exception
{
ObjectMapper mapper = new ObjectMapper();
SimpleAbstractTypeResolver resolver = new SimpleAbstractTypeResolver();
resolver.addMapping(Map.class, MyMap.class);
SimpleModule basicModule = new SimpleModule();
basicModule.setAbstractTypes(resolver);
mapper.registerModule(basicModule);
String value = "{\"z\": {\"zz\": {\"a\": 42}}}";
A a = mapper.readValue(value, A.class);
Map map = a.getMap();
assertEquals(MyMap.class, map.getClass());
Object ob = map.get("zz");
assertEquals(B.class, ob.getClass());
}
}
|