diff --git a/src/main/java/org/openapitools/jackson/nullable/JsonNullableJackson2Deserializer.java b/src/main/java/org/openapitools/jackson/nullable/JsonNullableJackson2Deserializer.java index 01eb04a..e566be6 100644 --- a/src/main/java/org/openapitools/jackson/nullable/JsonNullableJackson2Deserializer.java +++ b/src/main/java/org/openapitools/jackson/nullable/JsonNullableJackson2Deserializer.java @@ -1,8 +1,6 @@ package org.openapitools.jackson.nullable; -import com.fasterxml.jackson.core.JsonParser; -import com.fasterxml.jackson.core.JsonToken; import com.fasterxml.jackson.databind.DeserializationConfig; import com.fasterxml.jackson.databind.DeserializationContext; import com.fasterxml.jackson.databind.JavaType; @@ -10,16 +8,11 @@ import com.fasterxml.jackson.databind.deser.ValueInstantiator; import com.fasterxml.jackson.databind.deser.std.ReferenceTypeDeserializer; import com.fasterxml.jackson.databind.jsontype.TypeDeserializer; -import com.fasterxml.jackson.databind.type.ReferenceType; - -import java.io.IOException; public class JsonNullableJackson2Deserializer extends ReferenceTypeDeserializer> { private static final long serialVersionUID = 1L; - private boolean isStringDeserializer = false; - /* /********************************************************** /* Life-cycle @@ -28,9 +21,6 @@ public class JsonNullableJackson2Deserializer extends ReferenceTypeDeserializer< public JsonNullableJackson2Deserializer(JavaType fullType, ValueInstantiator inst, TypeDeserializer typeDeser, JsonDeserializer deser) { super(fullType, inst, typeDeser, deser); - if (fullType instanceof ReferenceType && ((ReferenceType) fullType).getReferencedType() != null) { - this.isStringDeserializer = ((ReferenceType) fullType).getReferencedType().isTypeOrSubTypeOf(String.class); - } } /* @@ -39,18 +29,6 @@ public JsonNullableJackson2Deserializer(JavaType fullType, ValueInstantiator ins /********************************************************** */ - @Override - public JsonNullable deserialize(JsonParser p, DeserializationContext ctxt) throws IOException { - JsonToken t = p.getCurrentToken(); - if (t == JsonToken.VALUE_STRING && !isStringDeserializer) { - String str = p.getText().trim(); - if (str.isEmpty()) { - return JsonNullable.undefined(); - } - } - return super.deserialize(p, ctxt); - } - @Override public JsonNullableJackson2Deserializer withResolved(TypeDeserializer typeDeser, JsonDeserializer valueDeser) { return new JsonNullableJackson2Deserializer(_fullType, _valueInstantiator, @@ -92,4 +70,4 @@ public Boolean supportsUpdate(DeserializationConfig config) { // yes; regardless of value deserializer reference itself may be updated return Boolean.TRUE; } -} \ No newline at end of file +} diff --git a/src/main/java/org/openapitools/jackson/nullable/JsonNullableJackson3Deserializer.java b/src/main/java/org/openapitools/jackson/nullable/JsonNullableJackson3Deserializer.java index a01ac80..be8c421 100644 --- a/src/main/java/org/openapitools/jackson/nullable/JsonNullableJackson3Deserializer.java +++ b/src/main/java/org/openapitools/jackson/nullable/JsonNullableJackson3Deserializer.java @@ -1,9 +1,6 @@ package org.openapitools.jackson.nullable; -import tools.jackson.core.JacksonException; -import tools.jackson.core.JsonParser; -import tools.jackson.core.JsonToken; import tools.jackson.databind.DeserializationConfig; import tools.jackson.databind.DeserializationContext; import tools.jackson.databind.JavaType; @@ -11,13 +8,10 @@ import tools.jackson.databind.deser.ValueInstantiator; import tools.jackson.databind.deser.std.ReferenceTypeDeserializer; import tools.jackson.databind.jsontype.TypeDeserializer; -import tools.jackson.databind.type.ReferenceType; public class JsonNullableJackson3Deserializer extends ReferenceTypeDeserializer> { - private boolean isStringDeserializer = false; - /* /********************************************************** /* Life-cycle @@ -26,9 +20,6 @@ public class JsonNullableJackson3Deserializer extends ReferenceTypeDeserializer< public JsonNullableJackson3Deserializer(JavaType fullType, ValueInstantiator inst, TypeDeserializer typeDeser, ValueDeserializer deser) { super(fullType, inst, typeDeser, deser); - if (fullType instanceof ReferenceType && ((ReferenceType) fullType).getReferencedType() != null) { - this.isStringDeserializer = ((ReferenceType) fullType).getReferencedType().isTypeOrSubTypeOf(String.class); - } } /* @@ -37,18 +28,6 @@ public JsonNullableJackson3Deserializer(JavaType fullType, ValueInstantiator ins /********************************************************** */ - @Override - public JsonNullable deserialize(JsonParser p, DeserializationContext ctxt) throws JacksonException { - JsonToken t = p.currentToken(); - if (t == JsonToken.VALUE_STRING && !isStringDeserializer) { - String str = p.getString().trim(); - if (str.isEmpty()) { - return JsonNullable.undefined(); - } - } - return super.deserialize(p, ctxt); - } - @Override protected ReferenceTypeDeserializer> withResolved(TypeDeserializer typeDeser, ValueDeserializer valueDeser) { return new JsonNullableJackson3Deserializer(_fullType, _valueInstantiator, @@ -90,4 +69,4 @@ public Boolean supportsUpdate(DeserializationConfig config) { // yes; regardless of value deserializer reference itself may be updated return Boolean.TRUE; } -} \ No newline at end of file +} diff --git a/src/test/java/org/openapitools/jackson/nullable/JsonNullWithEmptyTest.java b/src/test/java/org/openapitools/jackson/nullable/JsonNullWithEmptyTest.java index 69907e1..6f13fc0 100644 --- a/src/test/java/org/openapitools/jackson/nullable/JsonNullWithEmptyTest.java +++ b/src/test/java/org/openapitools/jackson/nullable/JsonNullWithEmptyTest.java @@ -7,7 +7,7 @@ import org.junit.jupiter.params.ParameterizedClass; import org.junit.jupiter.params.provider.MethodSource; -import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; @ParameterizedClass @@ -36,7 +36,7 @@ void setup() { @Test void testJsonNullableFromEmpty() throws Exception { JsonNullable value = jsonProcessor.readValue(quote(""), TypeReferences.INTEGER.getType(jsonProcessor)); - assertFalse(value.isPresent()); + assertEquals(JsonNullable.of(null), value); } // for [datatype-jdk8#23] @@ -47,7 +47,7 @@ void testBooleanWithEmpty() throws Exception { BooleanBean b = jsonProcessor.readValue(aposToQuotes("{'value':''}"), BooleanBean.class); assertNotNull(b.value); - assertFalse(b.value.isPresent()); + assertEquals(JsonNullable.of(null), b.value); } private enum TypeReferences { @@ -69,4 +69,4 @@ public Object getType(JsonProcessor jsonProcessor) { public abstract Object getType(JsonProcessor jsonProcessor); } -} \ No newline at end of file +} diff --git a/src/test/java/org/openapitools/jackson/nullable/JsonNullableBasicTest.java b/src/test/java/org/openapitools/jackson/nullable/JsonNullableBasicTest.java index 3daa019..f6ab78c 100644 --- a/src/test/java/org/openapitools/jackson/nullable/JsonNullableBasicTest.java +++ b/src/test/java/org/openapitools/jackson/nullable/JsonNullableBasicTest.java @@ -349,7 +349,7 @@ void testJsonNullableCollection() throws Exception { @Test void testDeserNull() throws Exception { JsonNullable value = jsonProcessor.readValue("\"\"", TypeReferences.INTEGER.getType(jsonProcessor)); - assertFalse(value.isPresent()); + assertEquals(JsonNullable.of(null), value); } @Test diff --git a/src/test/java/org/openapitools/jackson/nullable/JsonNullableSimpleTest.java b/src/test/java/org/openapitools/jackson/nullable/JsonNullableSimpleTest.java index 73a427f..264b220 100644 --- a/src/test/java/org/openapitools/jackson/nullable/JsonNullableSimpleTest.java +++ b/src/test/java/org/openapitools/jackson/nullable/JsonNullableSimpleTest.java @@ -144,8 +144,8 @@ void deserializeStringMembers(JsonProcessor jsonProcessor) throws Exception { void deserializeNonStringMembers(JsonProcessor jsonProcessor) throws Exception { testReadPetAge(jsonProcessor, JsonNullable.of(Integer.valueOf(15)), "{\"age\":\"15\"}"); testReadPetAge(jsonProcessor, JsonNullable.of(null), "{\"age\":null}"); - testReadPetAge(jsonProcessor, JsonNullable.undefined(), "{\"age\":\"\"}"); - testReadPetAge(jsonProcessor, JsonNullable.undefined(), "{\"age\":\" \"}"); + testReadPetAge(jsonProcessor, JsonNullable.of(null), "{\"age\":\"\"}"); + testReadPetAge(jsonProcessor, JsonNullable.of(null), "{\"age\":\" \"}"); testReadPetAge(jsonProcessor, JsonNullable.undefined(), "{}"); } @@ -163,8 +163,8 @@ void deserializeStringNonBeanMembers(JsonProcessor jsonProcessor) throws Excepti void deserializeNonStringNonBeanMembers(JsonProcessor jsonProcessor) throws Exception { assertEquals(JsonNullable.of(null), jsonProcessor.readValue("\"null\"", TypeReferences.INTEGER.getType(jsonProcessor))); assertEquals(JsonNullable.of(42), jsonProcessor.readValue("\"42\"", TypeReferences.INTEGER.getType(jsonProcessor))); - assertEquals(JsonNullable.undefined(), jsonProcessor.readValue("\"\"", TypeReferences.INTEGER.getType(jsonProcessor))); - assertEquals(JsonNullable.undefined(), jsonProcessor.readValue("\" \"", TypeReferences.INTEGER.getType(jsonProcessor))); + assertEquals(JsonNullable.of(null), jsonProcessor.readValue("\"\"", TypeReferences.INTEGER.getType(jsonProcessor))); + assertEquals(JsonNullable.of(null), jsonProcessor.readValue("\" \"", TypeReferences.INTEGER.getType(jsonProcessor))); } @ParameterizedTest