diff --git a/src/main/java/com/fasterxml/jackson/databind/deser/std/StringDeserializer.java b/src/main/java/com/fasterxml/jackson/databind/deser/std/StringDeserializer.java index c420536dd1..f8e0d88155 100644 --- a/src/main/java/com/fasterxml/jackson/databind/deser/std/StringDeserializer.java +++ b/src/main/java/com/fasterxml/jackson/databind/deser/std/StringDeserializer.java @@ -55,7 +55,8 @@ public String deserialize(JsonParser p, DeserializationContext ctxt) throws IOEx } // allow coercions for other scalar types String text = p.getValueAsString(); - if (text != null) { + // According to [databind#742], StringDeserializer shouldn't throw an exception if the value of the property is null + if (text != null || JsonToken.VALUE_NULL.equals(p.getCurrentToken())) { return text; } throw ctxt.mappingException(_valueClass, p.getCurrentToken()); diff --git a/src/test/java/com/fasterxml/jackson/databind/objectid/TestObjectIdDeserialization.java b/src/test/java/com/fasterxml/jackson/databind/objectid/TestObjectIdDeserialization.java index 2db9bdc610..cebd83c5d8 100644 --- a/src/test/java/com/fasterxml/jackson/databind/objectid/TestObjectIdDeserialization.java +++ b/src/test/java/com/fasterxml/jackson/databind/objectid/TestObjectIdDeserialization.java @@ -466,4 +466,31 @@ public void testNullObjectId() throws Exception assertNotNull(value); assertEquals(3, value.value); } + + //for databind#1150 + @JsonIdentityInfo(generator=ObjectIdGenerators.PropertyGenerator.class, property="id") + static class IdentifiableStringId + { + public String id; + public int value; + + public Identifiable next; + + public IdentifiableStringId() { this(0); } + public IdentifiableStringId(int v) { + value = v; + } + } + + public void testNullStringPropertyId() throws Exception + { + + + IdentifiableStringId value = MAPPER.readValue + (aposToQuotes("{'value':3, 'next':null, 'id':null}"), IdentifiableStringId.class); + assertNotNull(value); + assertEquals(3, value.value); + } + + }