-
-
Notifications
You must be signed in to change notification settings - Fork 1.2k
Jackson Release 2.20
Tatu Saloranta edited this page Oct 31, 2025
·
57 revisions
Jackson Version 2.20 was released on August 28, 2025. One release candidate (2.20.0-rc1) was released prior to final 2.20.0.
This wiki page gives a list of links to all changes (with brief descriptions) that were included, as well as about original plans for bigger changes (and in some cases changes to plans, postponing).
Branch is open for patch releases.
It is not designated a Long-Term-Support (LTS) version.
New datatype module added in jackson-datatype-hibernate:
Same as Jackson 2.19, SDK 26
Same as Jackson 2.19 (mostly Java 8) except:
-
jackson-annotationsnow requires Java 8 (no more Java 6 baseline)
Same as Jackson 2.19?
-
jackson-annotations no longer uses patch number: so we have version
2.20(instead of2.19.0and so on)- See jackson-annotations#294 and jackson-annotations#307 for details
Minimum supported Guava version now 22.0 (from 20.0 with 2.19 and prior) -- see guava#158
None
-
databind#5152: Support "iPhone" style capitalized properties (add
MapperFeature.FIX_FIELD_NAME_UPPER_CASE_PREFIX)
-
#291: Add
optionalproperty for@JacksonInjectto allow optionally injected values - #293: Improve duplicate Id with different associated object error message
- #294: Drop patch number from version for 2.20 and later (no more 2.20.0)
- #296: Drop Java 6 compatibility for 2.20 (Java 8 baseline)
-
#1438:
ParserBase.close()does not clear_currToken -
#1441: Add
StreamReadFeature.CLEAR_CURRENT_TOKEN_ON_CLOSE(default: true) -
#1448: Upgrade
FastDoubleParserto 2.0.1 -
#1462: Deprecate
URL-taking factory method ofJsonFactory
-
#2678:
@JacksonInjectadded to property overrides value from the JSON even ifuseInputisOptBoolean.TRUE -
#2692: Should never call
set()on setterless property during deserialization -
#3072: Allow specifying
@JacksonInjectdoes not fail when there's no corresponding value -
#4136: Drop deprecated (in 2.12)
PropertyNamingStrategyimplementations from 2.20 -
#4218: If
@JacksonInjectis specified for field and deserialized by the Creator, the inject process will be executed twice -
#4656:
DeserializationProblemHandler.handleUnexpectedToken()cast Object to String -
#5103: Use
writeStartObject(Object forValue, int size)forObjectNodeserialization -
#5151: Add new exception type,
MissingInjectValueException, to be used for failed@JacksonInject -
#5152: Support "iPhone" style capitalized properties (add
MapperFeature.FIX_FIELD_NAME_UPPER_CASE_PREFIX) - #5192: Record types are broken on Android when using R8
-
#5194: Custom
Throwablenot serializable if usingJsonAutoDetectsettings that only detect Fields -
#5197: Add more informative exception for back-references with
recordtype -
#5237: Failing
@JsonMergewith a custom Map with a@JsonCreatorconstructor -
#5238: Immutable classes with
@JsonIdentityInfocan be deserialized; records cannot -
#5242: Support "binary vectors":
@JsonFormat(shape = Shape.BINARY)forfloat[],double[] -
#5257: Deprecate
URL-takingreadValue()methods inObjectMapper,ObjectReader -
#5271:
EnumDeserializerfails to deserialize Enums with @JsonValue - uses table with name() key instead of @JsonValue key -
#5297: Deprecate
MapperBuilder.serializationInclusion()(to align withObjectMapper, prep for 3.0)
-
#137: Allow exposing CBOR "undefined" value as
JsonToken.VALUE_EMBEDDED_OBJECT(with embedded value ofnull) -
#431: Negative
BigIntegervalues not encoded/decoded correctly -
#587: Allow exposing CBOR Simple values as
JsonToken.VALUE_EMBEDDED_OBJECTwith a feature flag - #603: Add support for writing unsigned numbers to CBOR
-
#497:
UTF8Readerthrows "Need to move partially decoded character; buffer not modifiable" when read only one chinese char- NOTE: actual fix already merged in 2.19.0, marked as fixed in 2.20.0
-
#564:
CsvParser.getNumberValue(), related, do not throw exception for non-numeric tokens
-
#497:
UTF8Readerthrows "Need to move partially decoded character; buffer not modifiable" when read only one chinese char- NOTE: TOML part fixed in 2.20, CSV part earlier (in 2.19.0)
-
768:
FromXmlParserlacks extension point for passing customXmlTokenStream
-
#497:
UTF8Readerthrows "Need to move partially decoded character; buffer not modifiable" when read only one chinese char- NOTE: YAML part fixed in 2.20, CSV part earlier (in 2.19.0)
- #158: Increase minimum supported Guava from 20.x to 22.x for Jackson 2.20
-
#184: Add
jackson-datatype-hibernate7module for Hibernate version 7 - #186: Update hibernate 6 code to avoid deprecated code
-
#92:
DateTimeserialization result is not same as Java 8ZonedDateTime -
#146:
DateTimecan't be serialized with its own zone (WRITE_DATES_WITH_CONTEXT_TIME_ZONEnot respected)
- #967: Kotlin has been upgraded to 2.0.21.
- #969: Deprecated content has been cleaned up with the version upgrade.
-
#1018: Improved handling of
value classhas improved performance for both serialization and deserialization. - #1020: Exceptions thrown by the old StrictNullChecks are now the similar to the new StrictNullChecks.This means that the old StrictNullChecks will no longer throw MissingKotlinParameterException.
-
#1025: When a null is entered for a non-null parameter, the
KotlinInvalidNullExceptionis now thrown instead of the deprecatedMissingKotlinParameterException. The new exception is a subclass ofInvalidNullException. See #617 for information contained in this exception
- #758: Deprecate methods that take URL inputs