Skip to content

Commit 9dee833

Browse files
committed
Fix #2023
1 parent 6d5e2ba commit 9dee833

File tree

3 files changed

+32
-2
lines changed

3 files changed

+32
-2
lines changed

release-notes/VERSION-2.x

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@ Project: jackson-databind
2525
(reported by Carter K)
2626
#2019: Abstract Type mapping in 2.9 fails when multiple modules are registered
2727
(reported by asger82@github)
28+
#2023: `JsonFormat.Feature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT` not working
29+
with `null` coercion with `@JsonSetter`
2830

2931
2.9.5 (26-Mar-2018)
3032

src/main/java/com/fasterxml/jackson/databind/deser/impl/FieldProperty.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,13 @@ public void deserializeAndSet(JsonParser p,
134134
value = _nullProvider.getNullValue(ctxt);
135135
} else if (_valueTypeDeserializer == null) {
136136
value = _valueDeserializer.deserialize(p, ctxt);
137+
// 04-May-2018, tatu: [databind#2023] Coercion from String (mostly) can give null
138+
if (value == null) {
139+
if (_skipNulls) {
140+
return;
141+
}
142+
value = _nullProvider.getNullValue(ctxt);
143+
}
137144
} else {
138145
value = _valueDeserializer.deserializeWithType(p, ctxt, _valueTypeDeserializer);
139146
}
@@ -156,6 +163,13 @@ public Object deserializeSetAndReturn(JsonParser p,
156163
value = _nullProvider.getNullValue(ctxt);
157164
} else if (_valueTypeDeserializer == null) {
158165
value = _valueDeserializer.deserialize(p, ctxt);
166+
// 04-May-2018, tatu: [databind#2023] Coercion from String (mostly) can give null
167+
if (value == null) {
168+
if (_skipNulls) {
169+
return instance;
170+
}
171+
value = _nullProvider.getNullValue(ctxt);
172+
}
159173
} else {
160174
value = _valueDeserializer.deserializeWithType(p, ctxt, _valueTypeDeserializer);
161175
}

src/main/java/com/fasterxml/jackson/databind/deser/impl/MethodProperty.java

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,13 @@ public void deserializeAndSet(JsonParser p, DeserializationContext ctxt,
125125
value = _nullProvider.getNullValue(ctxt);
126126
} else if (_valueTypeDeserializer == null) {
127127
value = _valueDeserializer.deserialize(p, ctxt);
128+
// 04-May-2018, tatu: [databind#2023] Coercion from String (mostly) can give null
129+
if (value == null) {
130+
if (_skipNulls) {
131+
return;
132+
}
133+
value = _nullProvider.getNullValue(ctxt);
134+
}
128135
} else {
129136
value = _valueDeserializer.deserializeWithType(p, ctxt, _valueTypeDeserializer);
130137
}
@@ -147,6 +154,13 @@ public Object deserializeSetAndReturn(JsonParser p,
147154
value = _nullProvider.getNullValue(ctxt);
148155
} else if (_valueTypeDeserializer == null) {
149156
value = _valueDeserializer.deserialize(p, ctxt);
157+
// 04-May-2018, tatu: [databind#2023] Coercion from String (mostly) can give null
158+
if (value == null) {
159+
if (_skipNulls) {
160+
return instance;
161+
}
162+
value = _nullProvider.getNullValue(ctxt);
163+
}
150164
} else {
151165
value = _valueDeserializer.deserializeWithType(p, ctxt, _valueTypeDeserializer);
152166
}
@@ -165,7 +179,7 @@ public final void set(Object instance, Object value) throws IOException
165179
try {
166180
_setter.invoke(instance, value);
167181
} catch (Exception e) {
168-
// 15-Sep-2015, tatu: How coud we get a ref to JsonParser?
182+
// 15-Sep-2015, tatu: How could we get a ref to JsonParser?
169183
_throwAsIOE(e, value);
170184
}
171185
}
@@ -177,7 +191,7 @@ public Object setAndReturn(Object instance, Object value) throws IOException
177191
Object result = _setter.invoke(instance, value);
178192
return (result == null) ? instance : result;
179193
} catch (Exception e) {
180-
// 15-Sep-2015, tatu: How coud we get a ref to JsonParser?
194+
// 15-Sep-2015, tatu: How could we get a ref to JsonParser?
181195
_throwAsIOE(e, value);
182196
return null;
183197
}

0 commit comments

Comments
 (0)