From 517056b6e1ba1fd921a16041d53eb670c4aed60d Mon Sep 17 00:00:00 2001 From: Tatu Saloranta Date: Wed, 6 Mar 2024 21:35:59 -0800 Subject: [PATCH] Fix #4416: Deprecate `JsonNode.asText(String)` --- release-notes/CREDITS-2.x | 4 ++++ release-notes/VERSION-2.x | 2 ++ src/main/java/com/fasterxml/jackson/databind/JsonNode.java | 7 +++++++ .../jackson/databind/deser/CustomDeserializersTest.java | 2 +- .../fasterxml/jackson/databind/node/NumberNodesTest.java | 2 +- 5 files changed, 15 insertions(+), 2 deletions(-) diff --git a/release-notes/CREDITS-2.x b/release-notes/CREDITS-2.x index 79a108cf4a..0b57855eaa 100644 --- a/release-notes/CREDITS-2.x +++ b/release-notes/CREDITS-2.x @@ -1752,3 +1752,7 @@ Jesper Blomquist (jebl01@github) * Contributed #4393: Deserialize `java.util.UUID` encoded as Base64 and base64Url with or without padding (2.17.0) + +András Péteri (apeteri@github) + * Suggested #4416: Deprecate `JsonNode.asText(String)` + (2.17.0) diff --git a/release-notes/VERSION-2.x b/release-notes/VERSION-2.x index c1cf248b5e..98ea7fba12 100644 --- a/release-notes/VERSION-2.x +++ b/release-notes/VERSION-2.x @@ -45,6 +45,8 @@ Project: jackson-databind #4394: Better Base64 support for `java.util.UUIDs` without padding (fix contributed by Jesper B) +#4416: Deprecate `JsonNode.asText(String)` + (suggested by András P) - JUnit5 upgraded to 5.10.1 2.16.2 (not yet released) diff --git a/src/main/java/com/fasterxml/jackson/databind/JsonNode.java b/src/main/java/com/fasterxml/jackson/databind/JsonNode.java index 6d01a99216..f81acf6685 100644 --- a/src/main/java/com/fasterxml/jackson/databind/JsonNode.java +++ b/src/main/java/com/fasterxml/jackson/databind/JsonNode.java @@ -635,9 +635,16 @@ public byte[] binaryValue() throws IOException { * defaultValue in cases where null value would be returned; * either for missing nodes (trying to access missing property, or element * at invalid item for array) or explicit nulls. + *

+ * NOTE: deprecated since 2.17 because {@link #asText()} very rarely returns + * {@code null} for any node types -- in fact, neither {@link MissingNode} + * nor {@code NullNode} return {@code null} from {@link #asText()}. * * @since 2.4 + * + * @deprecated Since 2.17, to be removed from 3.0 */ + @Deprecated // @since 2.17 public String asText(String defaultValue) { String str = asText(); return (str == null) ? defaultValue : str; diff --git a/src/test/java/com/fasterxml/jackson/databind/deser/CustomDeserializersTest.java b/src/test/java/com/fasterxml/jackson/databind/deser/CustomDeserializersTest.java index 1f2982a8a6..c2bfe713ea 100644 --- a/src/test/java/com/fasterxml/jackson/databind/deser/CustomDeserializersTest.java +++ b/src/test/java/com/fasterxml/jackson/databind/deser/CustomDeserializersTest.java @@ -355,7 +355,7 @@ public NamedPoint deserialize(JsonParser p, DeserializationContext ctxt) throws IOException { JsonNode tree = ctxt.readTree(p); - String name = tree.path("name").asText(null); + String name = tree.path("name").asText(); Point point = ctxt.readTreeAsValue(tree.get("point"), Point.class); return new NamedPoint(name, point); } diff --git a/src/test/java/com/fasterxml/jackson/databind/node/NumberNodesTest.java b/src/test/java/com/fasterxml/jackson/databind/node/NumberNodesTest.java index a6ad436211..1f143f1deb 100644 --- a/src/test/java/com/fasterxml/jackson/databind/node/NumberNodesTest.java +++ b/src/test/java/com/fasterxml/jackson/databind/node/NumberNodesTest.java @@ -82,7 +82,7 @@ public void testInt() assertEquals(BigInteger.ONE, n.bigIntegerValue()); assertEquals("1", n.asText()); // 2.4 - assertEquals("1", n.asText("foo")); + assertEquals("1", n.asText()); assertNodeNumbers(n, 1, 1.0);