Skip to content

Jackson Release 2.21

Tatu Saloranta edited this page Feb 7, 2026 · 62 revisions

Jackson Version 2.21 was released on January 18, 2026. No release candidates were released prior to final 2.21.0.

This wiki page gives a list of links to all changes (with brief descriptions) that are included, as well as about original plans for bigger changes (and in some cases changes to plans, postponing).

Status

Branch is open for new patch releases.

It is designated as a Long-Term-Support (LTS) version.

Patches

Documentation

Articles, Blog posts

New Modules

SPI Subtypes module

New datatype module added in jackson-modules-base:

Changes, packaging

  • databind#5361 fixes CycloneDX SBOM publishing so it finally works.

Changes, compatibility

Android

Same as Jackson 2.20, SDK 26

JDK

Same as Jackson 2.20; mostly Java 8, with some modules requiring later JDKs:

  • jackson-datatype-hibernate: JDK 17 to build due to Hibernate7 requiring it
  • jackson-jakarta-providers: JDK 11

Kotlin

Same as Jackson 2.20

Compatibility: datatype modules

No changes.

Changes, behavior

None.


Major focus area(s)

Most wanted Features implemented

  • #1381: Add a way to specify "inject-only" with @JacksonInject

Full Change list

Changes, core

  • #314: Add JsonInclude.Value convenience constants
  • #315: Add @JsonDeserializeAs
  • #316: Make JsonFormat.Features java.io.Serializable
  • #320: Add radix property to @JsonFormat annotation
    • NOTE: supported only by Jackson 3.x (3.1+)
  • #324: Add @JsonSerializeAs
  • #326: Add JsonTypeInfo.As.NOTHING value
  • #363: UTF-8 decoding should fail on Surrogate characters (0xD800 - 0xDFFF)
  • #708: FilteringParserDelegate cannot deserialize empty list
  • #1180: JsonLocation off for unrecognized tokens
  • #1418: TokenFilter#includeEmptyArray() causes an error in some cases where an object element is filtered
  • #1470: Add method copyCurrentStructureExact() to JsonGenerator
  • #1477: Add JsonGenerator.has(StreamWriteCapability) convenience method
  • #1500: Add checks for surrogate pairing for UTF-8 generation
  • #1512: Number-parsing fix for UTF8DataInputJsonParser
  • #1381: Add a way to specify "inject-only" with @JacksonInject (MOST WANTED)
  • #1547: Un-deprecate SerializationFeature.WRITE_EMPTY_JSON_ARRAYS
  • #5045: If there is a no-parameter constructor marked as JsonCreator and a constructor reported as DefaultCreator, latter is incorrectly used
  • #5203: Fix null handling of EnumSetDeserializer
  • #5293: Fix minor typo in PropertyBindingException.getMessageSuffix()
  • #5313: Expose getConverter() in StdDelegatingSerializer for improved customizability
  • #5361: Fix Maven SBOM publishing
  • #5368: Optimize performance of ObjectMapper.convertValue() when TokenBuffer passed as fromValue
  • #5398: @JsonProperty.value + @JsonIgnore on setter does not work anymore since 2.18.4
  • #5413: Add/support forward reference resolution for array values
  • #5429: Formatting and Parsing of Large ISO-8601 Dates is inconsistent
  • #5475: Support @JsonDeserializeAs annotation
  • #5476: Support @JsonSerializeAs annotation
  • #5541: Add missing @JsonIdentityInfo handling for implicit arrays with DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY
  • #5542: ObjectReader.readValue() does not fail when DeserializationFeature.FAIL_ON_UNRESOLVED_OBJECT_IDS enabled

Changes, data formats

Avro

  • #628: Uncommon parent pom dependency configuration in Jackson 2.20/3.0
  • Upgrade avro lib dep to 1.11.5 (from 1.11.4)

CBOR

  • #599: Unable to deserialize stringref-enabled CBOR with ignored properties
  • #628: Uncommon parent pom dependency configuration in Jackson 2.20/3.0

CSV

  • #10: Missing null writes when writing Object[] values
  • #479: STRICT_CHECK_FOR_QUOTING does not quote value that contains newline character

Ion

  • #623: (ion) Upgrade ion-java dep to 1.11.11 (from 1.11.10)
  • #628: Uncommon parent pom dependency configuration in Jackson 2.20/3.0

Protobuf

  • #628: Uncommon parent pom dependency configuration in Jackson 2.20/3.0

Smile

  • #628: Uncommon parent pom dependency configuration in Jackson 2.20/3.0
  • #114: XmlMapper does not support StreamReadFeature.STRICT_DUPLICATE_DETECTION

YAML

  • #154: YAML file with no content throws MismatchedInputException when binding to Object type (POJO etc)

Changes, data types

Eclipse Collections

  • #198: Add support for MutableSortedMap/ImmutableSortedMap deserialization

Guava

  • #195: Add support for RangeMap class
  • #359: InstantDeserializer deserializes the nanosecond portion of fractional negative timestamps incorrectly: -1.000000001 deserializes to 1969-12-31T23:59:59.000000001Z instead of 1969-12-31T23:59:58.999999999Z
  • #376: Allow specifying custom DateTimeFormatter for OffsetDateTime ser/deser (new constructors?)
  • #381: Fix a potential problem in JavaTimeModule._findFactory()

Changes, other modules

Base modules

  • #229: Add jackson-module-spi-subtypes module

Changes, JVM Languages

  • #1039: Kotlin has been upgraded to 2.1.x.
  • #1041: The deprecated MissingKotlinParameterException has been removed.
  • #1042: The old StrictNullChecks backend has been removed. This improves the throughput of deserialization slightly.
  • #1043: Deprecated content has been cleaned up with the version upgrade.
  • #1085: The addMixIn extension function is now available in the generic MapperBuilder.

Changes, other

  • #176: Cannot Deserialize JSON with @JsonProperty-annotated Record fields
  • #208: Support reading of double[]
  • #210: Support reading boolean[]/short[]/float[] values

Clone this wiki locally