Jackson Release 2.21 (original) (raw)
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 and should remain open until January 31, 2028 (minimum of 2 years from .0).
Patches
- 2.21.1 (22-Feb-2026)
- 2.21.2 (20-Mar-2026)
- 2.21.3 (28-Mar-2026)
- 2.21.4 (28-May-2026)
- 2.21.5 (not yet released)
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 itjackson-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
Annotations
- #314: Add
JsonInclude.Valueconvenience constants - #315: Add
@JsonDeserializeAs - #316: Make
JsonFormat.Featuresjava.io.Serializable - #320: Add
radixproperty to@JsonFormatannotation- NOTE: supported only by Jackson 3.x (3.1+)
- #324: Add
@JsonSerializeAs - #326: Add
JsonTypeInfo.As.NOTHINGvalue
Streaming
- #363: UTF-8 decoding should fail on Surrogate characters (0xD800 - 0xDFFF)
- #708:
FilteringParserDelegatecannot deserialize empty list - #1180:
JsonLocationoff for unrecognized tokens - #1418:
TokenFilter#includeEmptyArray()causes an error in some cases where an object element is filtered - #1470: Add method
copyCurrentStructureExact()toJsonGenerator - #1477: Add
JsonGenerator.has(StreamWriteCapability)convenience method - #1500: Add checks for surrogate pairing for UTF-8 generation
- #1512: Number-parsing fix for
UTF8DataInputJsonParser
Databind
- #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
JsonCreatorand a constructor reported asDefaultCreator, latter is incorrectly used - #5203: Fix
nullhandling ofEnumSetDeserializer - #5293: Fix minor typo in
PropertyBindingException.getMessageSuffix() - #5313: Expose
getConverter()inStdDelegatingSerializerfor improved customizability - #5361: Fix Maven SBOM publishing
- #5368: Optimize performance of
ObjectMapper.convertValue()whenTokenBufferpassed asfromValue - #5398:
@JsonProperty.value+@JsonIgnoreon 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
@JsonDeserializeAsannotation - #5476: Support
@JsonSerializeAsannotation - #5541: Add missing
@JsonIdentityInfohandling for implicit arrays withDeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY - #5542:
ObjectReader.readValue()does not fail whenDeserializationFeature.FAIL_ON_UNRESOLVED_OBJECT_IDSenabled
Changes, data formats
Avro
- #628: Uncommon parent pom dependency configuration in Jackson 2.20/3.0
- Upgrade
avrolib 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
nullwrites when writingObject[]values - #479:
STRICT_CHECK_FOR_QUOTINGdoes not quote value that contains newline character
Ion
- #623: (ion) Upgrade
ion-javadep 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
XML
- #114:
XmlMapperdoes not supportStreamReadFeature.STRICT_DUPLICATE_DETECTION
YAML
- #154: YAML file with no content throws
MismatchedInputExceptionwhen binding to Object type (POJO etc)
Changes, data types
Eclipse Collections
- #198: Add support for
MutableSortedMap/ImmutableSortedMapdeserialization
Guava
- #195: Add support for
RangeMapclass
Java 8 date/time
- #359:
InstantDeserializerdeserializes the nanosecond portion of fractional negative timestamps incorrectly:-1.000000001deserializes to1969-12-31T23:59:59.000000001Zinstead of1969-12-31T23:59:58.999999999Z - #376: Allow specifying custom
DateTimeFormatterforOffsetDateTimeser/deser (new constructors?) - #381: Fix a potential problem in
JavaTimeModule._findFactory()
Changes, other modules
Base modules
- #229: Add
jackson-module-spi-subtypesmodule
Changes, JVM Languages
Kotlin
- #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.