Skip to content

Commit e412926

Browse files
committed
Add tests wrt #795
1 parent f92a6b3 commit e412926

File tree

2 files changed

+112
-1
lines changed

2 files changed

+112
-1
lines changed

src/test/java/com/fasterxml/jackson/databind/convert/TestConvertingDeserializer.java

+29-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.fasterxml.jackson.databind.convert;
22

3+
import java.math.BigDecimal;
34
import java.util.*;
45

56
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
@@ -97,7 +98,23 @@ static class LowerCaseTextArray {
9798
@JsonDeserialize(contentConverter=LowerCaser.class)
9899
public String[] texts;
99100
}
100-
101+
102+
// for [databind#795]
103+
104+
static class ToNumberConverter extends StdConverter<String,Number>
105+
{
106+
@Override
107+
public Number convert(String value) {
108+
return new BigDecimal(value);
109+
}
110+
}
111+
112+
static class Issue795Bean
113+
{
114+
@JsonDeserialize(converter=ToNumberConverter.class)
115+
public Number value;
116+
}
117+
101118
/*
102119
/**********************************************************
103120
/* Test methods
@@ -180,4 +197,15 @@ public void testPropertyAnnotationForMaps() throws Exception
180197
assertEquals(1, p.x);
181198
assertEquals(2, p.y);
182199
}
200+
201+
// [databind#795]
202+
public void testConvertToAbstract() throws Exception
203+
{
204+
Issue795Bean bean = objectReader(Issue795Bean.class)
205+
.readValue("{\"value\":\"1.25\"}");
206+
assertNotNull(bean.value);
207+
assertTrue("Type not BigDecimal but "+bean.value.getClass(),
208+
bean.value instanceof BigDecimal);
209+
assertEquals(new BigDecimal("1.25"), bean.value);
210+
}
183211
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
package com.fasterxml.jackson.failing;
2+
3+
import com.fasterxml.jackson.annotation.*;
4+
import com.fasterxml.jackson.databind.*;
5+
import com.fasterxml.jackson.databind.annotation.*;
6+
import com.fasterxml.jackson.databind.util.StdConverter;
7+
8+
// for [databind#795]
9+
public class ConvertingAbstractSerializer795Test extends BaseMapTest
10+
{
11+
public static abstract class AbstractCustomType {
12+
final String value;
13+
public AbstractCustomType(String v) {
14+
this.value = v;
15+
}
16+
}
17+
18+
public static class ConcreteCustomType extends AbstractCustomType {
19+
public ConcreteCustomType(String v) {
20+
super(v);
21+
}
22+
}
23+
24+
public static class AbstractCustomTypeDeserializationConverter extends StdConverter<String, AbstractCustomType>{
25+
26+
@Override
27+
public AbstractCustomType convert(String arg) {
28+
return new ConcreteCustomType(arg);
29+
}
30+
}
31+
32+
public static class AbstractCustomTypeUser {
33+
@JsonProperty
34+
@JsonDeserialize(converter = AbstractCustomTypeDeserializationConverter.class)
35+
private final AbstractCustomType customField;
36+
37+
@JsonCreator AbstractCustomTypeUser(@JsonProperty("customField")
38+
AbstractCustomType customField) {
39+
this.customField = customField;
40+
}
41+
}
42+
43+
public static class NonAbstractCustomType {
44+
final String value;
45+
public NonAbstractCustomType(String v) {
46+
this.value = v;
47+
}
48+
}
49+
50+
51+
public static class NonAbstractCustomTypeDeserializationConverter extends StdConverter<String, NonAbstractCustomType>{
52+
53+
@Override
54+
public NonAbstractCustomType convert(String arg) {
55+
return new NonAbstractCustomType(arg);
56+
}
57+
}
58+
59+
60+
public static class NonAbstractCustomTypeUser {
61+
@JsonProperty
62+
@JsonDeserialize(converter = NonAbstractCustomTypeDeserializationConverter.class)
63+
private final NonAbstractCustomType customField;
64+
65+
@JsonCreator NonAbstractCustomTypeUser(@JsonProperty("customField") NonAbstractCustomType customField) {
66+
this.customField = customField;
67+
}
68+
}
69+
70+
private static final ObjectMapper JSON_MAPPER = new ObjectMapper();
71+
72+
public void testAbstractTypeDeserialization() throws Exception {
73+
String test="{\"customField\": \"customString\"}";
74+
AbstractCustomTypeUser cu = JSON_MAPPER.readValue(test, AbstractCustomTypeUser.class);
75+
assertNotNull(cu);
76+
}
77+
78+
public void testNonAbstractDeserialization() throws Exception {
79+
String test="{\"customField\": \"customString\"}";
80+
NonAbstractCustomTypeUser cu = JSON_MAPPER.readValue(test, NonAbstractCustomTypeUser.class);
81+
assertNotNull(cu);
82+
}
83+
}

0 commit comments

Comments
 (0)