From dab5c8752576dbd36f6e0870427f733492e24b21 Mon Sep 17 00:00:00 2001 From: Tatu Saloranta Date: Mon, 13 Oct 2025 18:03:16 -0700 Subject: [PATCH] Clean up wrt #5335 (not fix) --- .../jackson/databind/ValueDeserializer.java | 2 +- .../jdk/AtomicReferenceDeserializer.java | 20 ++----------------- .../deser/std/ReferenceTypeDeserializer.java | 11 ++++++---- .../ext/jdk8/Jdk8OptionalDeserializer.java | 18 ----------------- 4 files changed, 10 insertions(+), 41 deletions(-) diff --git a/src/main/java/tools/jackson/databind/ValueDeserializer.java b/src/main/java/tools/jackson/databind/ValueDeserializer.java index e1dc7b03e9d..744a91a3da5 100644 --- a/src/main/java/tools/jackson/databind/ValueDeserializer.java +++ b/src/main/java/tools/jackson/databind/ValueDeserializer.java @@ -390,7 +390,7 @@ public Object getAbsentValue(DeserializationContext ctxt) { /********************************************************************** */ -/** + /** * Method called to determine value to be used for "empty" values * (most commonly when deserializing from empty JSON Strings). * Usually this is same as {@link #getNullValue} (which in turn diff --git a/src/main/java/tools/jackson/databind/deser/jdk/AtomicReferenceDeserializer.java b/src/main/java/tools/jackson/databind/deser/jdk/AtomicReferenceDeserializer.java index f6092c82f91..e4168a3dd56 100644 --- a/src/main/java/tools/jackson/databind/deser/jdk/AtomicReferenceDeserializer.java +++ b/src/main/java/tools/jackson/databind/deser/jdk/AtomicReferenceDeserializer.java @@ -31,28 +31,12 @@ public AtomicReferenceDeserializer withResolved(TypeDeserializer typeDeser, Valu @Override public AtomicReference getNullValue(DeserializationContext ctxt) { // 07-May-2019, tatu: [databind#2303], needed for nested ReferenceTypes - return new AtomicReference(_valueDeserializer.getNullValue(ctxt)); - } - - @Override - public Object getEmptyValue(DeserializationContext ctxt) { - // 07-May-2019, tatu: I _think_ this needs to align with "null value" and - // not necessarily with empty value of contents? (used to just do "absent" - // so either way this seems to me like an improvement) - return getNullValue(ctxt); - } - - /** - * Let's actually NOT coerce missing Creator parameters into empty value. - */ - @Override - public Object getAbsentValue(DeserializationContext ctxt) { - return null; + return new AtomicReference<>(_valueDeserializer.getNullValue(ctxt)); } @Override public AtomicReference referenceValue(Object contents) { - return new AtomicReference(contents); + return new AtomicReference<>(contents); } @Override diff --git a/src/main/java/tools/jackson/databind/deser/std/ReferenceTypeDeserializer.java b/src/main/java/tools/jackson/databind/deser/std/ReferenceTypeDeserializer.java index 90c6110383c..adb18ef30e7 100644 --- a/src/main/java/tools/jackson/databind/deser/std/ReferenceTypeDeserializer.java +++ b/src/main/java/tools/jackson/databind/deser/std/ReferenceTypeDeserializer.java @@ -115,10 +115,13 @@ public Object getEmptyValue(DeserializationContext ctxt) { // 02-Sep-2021, tatu: Related to [databind#3214] we may want to add this... but // with 2.13.0 so close will not yet do that, but wait for 2.14 -// @Override -// public Object getAbsentValue(DeserializationContext ctxt) { -// return null; -// } + // 13-Oct-2025, tatu: Time to do it for 3.0.1 (ought to have done for 3.0.0 but missed it) + @Override + public Object getAbsentValue(DeserializationContext ctxt) { + // 21-Sep-2022, tatu: [databind#3601] Let's make absent become `null`, + // NOT "null value" (Empty) + return null; + } public abstract T referenceValue(Object contents); diff --git a/src/main/java/tools/jackson/databind/ext/jdk8/Jdk8OptionalDeserializer.java b/src/main/java/tools/jackson/databind/ext/jdk8/Jdk8OptionalDeserializer.java index 033811bada0..23f8223ae7a 100644 --- a/src/main/java/tools/jackson/databind/ext/jdk8/Jdk8OptionalDeserializer.java +++ b/src/main/java/tools/jackson/databind/ext/jdk8/Jdk8OptionalDeserializer.java @@ -34,24 +34,6 @@ public Optional getNullValue(DeserializationContext ctxt) { return Optional.ofNullable(_valueDeserializer.getNullValue(ctxt)); } - @Override - public Object getEmptyValue(DeserializationContext ctxt) { - // 07-May-2019, tatu: I _think_ this needs to align with "null value" and - // not necessarily with empty value of contents? (used to just do "absent" - // so either way this seems to me like an improvement) - return getNullValue(ctxt); - } - - /** - * Let's actually NOT coerce missing Creator parameters into empty value. - */ - @Override - public Object getAbsentValue(DeserializationContext ctxt) { - // 21-Sep-2022, tatu: [databind#3601] Let's make absent become `null`, - // NOT "null value" (Empty) - return null; - } - @Override public Optional referenceValue(Object contents) { return Optional.ofNullable(contents);