-
-
Notifications
You must be signed in to change notification settings - Fork 1.2k
Jackson Release 2.19
Tatu Saloranta edited this page Oct 30, 2025
·
91 revisions
Jackson Version 2.19 was released on April 24, 2025. One release candidate (2.19.0-rc2) was released prior to final 2.19.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 closed since it is not a Long-Term-Support (LTS) version: no more patch releases planned (but as usual, micro-patches possible)
Two new datatype modules added in jackson-datatypes-misc:
-
jackson-datatype-javax-money: support for basic Java Money (JSR-354) datatypes -
jackson-datatype-moneta: support for extended Java Money datatypes JSR-354 RI, Moneta offers
Same as Jackson 2.18, SDK 26
Same as Jackson 2.18 -- mostly Java 8
Same as Jackson 2.18?
- Handling of "orphan" tildes (
~not part of~0or~1escape sequence) changed:-
#1361:
JsonPointerparsing of '~' not followed by "0" or "1" unexpected - NOTE: use of such "orphan" tildes is not (well) covered by JSON Pointer specs so expected handling is not defined.
- Old behavior used
~as "general escape", i.e. skipped~and included following character - New behavior feels more expected: unpaired
~will simply be included as-is
-
#1361:
-
#1467: Support
@JsonUnwrappedwith@JsonCreator
-
#280: Minor change to
module-info.java: use "open module" - #281: [gradle-module-metadata-maven-plugin] update to version 1.0
-
#284: Add
OptBooleanvalued@JsonProperty.isRequiredto (eventually) replace@JsonProperty.required
-
#633: Allow skipping
RSCTRL-CHAR to support JSON Text Sequences -
#1144:
FilteringParserDelegatecan go into an infinite loop if underlying parser is non-blocking -
#1328: Optimize handling of
JsonPointer.head() -
#1356: Make
JsonGenerator::writeTypePrefixmethod to not write aWRAPPER_ARRAYwhentypeIdDef.id == null -
#1361:
JsonPointerparsing of '~' not followed by "0" or "1" unexpected -
#1394: Wrong/misleading error for "extra" close token (
]or}) when at root level - #1407: [gradle-module-metadata-maven-plugin] update to version 1.0
- #1412: More cases of Non-blocking parser reporting incorrect locations when fed with non-zero offset
-
#1421: Make
JsonReadContextnon-final
-
#1467: Support
@JsonUnwrappedwith@JsonCreator -
#2145: Add
JsonNode.optional(String name)andoptional(int index)methods -
#2461: Nested
@JsonUnwrappedproperty names not correctly handled -
#2951: Allow inverting
@JsonProperty(access=)withMapperFeature.INVERSE_READ_WRITE_ACCESSto work differently on server and client side -
#3343: Allow BeanPropertyWriter Sub-classes to Override
get()(removefinal) -
#4388: Allow using
@JsonPropertyOrderwith "any" (@JsonAnyGetter) properties -
#4533: Add
MapperFeature.REQUIRE_HANDLERS_FOR_JAVA8_TIMESto disable the "Java 8 date/time XYZ not supported by default" error -
#4650:
PrimitiveArrayDeserializersshould deal with single String value ifDeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAYenabled - #4674: Allow setting global enum naming strategy similar to property naming strategy
- #4676: Support other enum naming strategies than camelCase
-
#4680: Custom key deserialiser registered for
Object.classin nested Map object is ignored when Map key type not defined -
#4771:
QName(de)serialization ignores prefix -
#4772: Serialization and deserialization issue of sub-types used with
JsonTypeInfo.Id.DEDUCTIONwhere sub-types are Object and Array -
#4773:
SerializationFeature.ORDER_MAP_ENTRIES_BY_KEYSshould not apply to Maps with uncomparable keys -
#4801: Add
JsonNodeFeature.USE_BIG_DECIMAL_FOR_FLOATSto allow overridingDeserializationFeature.USE_BIG_DECIMAL_FOR_FLOATS - #4849: Not able to deserialize Enum with default typing after upgrading 2.15.4 -> 2.17.1
-
#4863: Add basic Stream support in
JsonNode:valueStream(),entryStream(),forEachEntry() -
#4867: Add
Optional<JsonNode> JsonNode.asOptional()convenience method - #4896: Coercion shouldn't be necessary for Enums specifying an empty string
-
#4915: Cannot access attributes from
Converter -
#4934:
DeserializationContext.readTreeAsValue()handles null nodes differently fromObjectMapper.treeToValue() -
#4938: Allow
@JsonCreatorannotated Creator to returnnull - #4953: Allow clearing all caches to avoid classloader leaks
-
#4955: Add more remove methods for
ArrayNode,ObjectNode[STEP-3] -
#4959: Add explicit deserializer for
ThreadGroup -
#4961: Serialization for
JsonFormat.Shape.ARRAYdoes not work when there is@JsonAnyGetter -
#4963: Serializing
Map.Entryas Bean with@JsonFormat.shape = Shape.OBJECTfails on JDK 17+ -
#4979: Allow default enums with
@JsonCreator -
#4997:
ObjectNodeput methods should do null check for key -
#5006: Add
MapperFeature.REQUIRE_HANDLERS_FOR_JAVA8_OPTIONALSto prevent failure ofjava.util.Optional(de)serialization without Java 8 module -
#5014: Add
java.lang.Runnableas unsafe base type inDefaultBaseTypeLimitingValidator -
#5020: Support new
@JsonProperty.isRequiredfor overridable definition of "required-ness" -
#5027: Add
DeserializationFeature.FAIL_ON_SUBTYPE_CLASS_NOT_REGISTERED -
#5052: Minor bug in
FirstCharBasedValidator.forFirstNameRule(): returnsnullin non-default case -
#5063:
SimpleModulenot registered due togetTypeId()returning an empty string -
#5069: Add copy-constructor for
MappingIterator
-
#308: Incorrect serialization for
LogicalType.Decimal(JavaBigDecimal) -
#388:
@JsonEnumDefaultValuenot supported when using AvroMapper to generate schema from Java class - #422: Avro generation failed with enums containing values with special characters
- #535: AvroSchemaGenerator: logicalType(s) never set for non-date classes
-
#536: Add Logical Type support for
java.util.UUID
-
#568: Improve ASCII decoding performance for
CBORParser
-
#31: Header names seem to be trimmed (add
CsvParser.Feature.TRIM_HEADER_SPACES)) -
#554: Enforce, document thread-safety of
CsvSchema
-
#571: Unable to deserialize a pojo with
IonStruct
- #300: Floats are encoded with sign extension while doubles without
-
#508:
XmlMapperis unable to deserialise into an empty record -
#714: Root-level
nullhandling (viaxsi:nil) leaves trailing token inJsonParser-exposed token stream -
#745: Add feature to include
standalone='yes'in xml declaration
-
#502: Add an optional extended parser subclass (
YAMLAnchorReplayingFactory) able to inline anchors - #537: Snakeyaml 2.4
-
#1: Add deserialization support for
Table<R, C, V>
-
#336: Optimize
InstantDeserializeraddInColonToOffsetIfMissing() -
#337: Negative
Durationdoes not round-trip properly withWRITE_DURATIONS_AS_TIMESTAMPSenabled -
#342: Lenient deserialization of
LocalDate,LocalDateTimeis not time-zone aware - #364: Deserialization of Month in ONE_BASED_MONTHS mode fails for value "12"
-
#285:
JacksonBlackbirdAccessClass access exception with Groovy Script serialization usingBlackbirdModule
- #290: Update Paranamer dep from 2.8 to 2.8.3
- #835: Remove old SingletonSupport class and unified with KotlinFeature.SingletonSupport.
- #839: Remove useKotlinPropertyNameForGetter and unify with kotlinPropertyNameAsImplicitName.
- #858: Minor performance improvement of findDefaultCreator in edge cases.
- #869: By using Enum.entries in the acquisition of KotlinFeature.defaults, the initialization load was reduced, albeit slightly.
-
#878: Fixed a problem where settings like
@JsonSetter(nulls = AS_EMPTY)were not being applied when the input wasundefined. -
#883: The deprecation level has been raised to error for the
MissingKotlinParameterExceptionsecondary constructor. This is a problematic process that has been marked as deprecated for a very long time and will be removed in 2.20 or later -
#884: The base class for
MissingKotlinParameterExceptionhas been changed toInvalidNullException. -
#885: A new
StrictNullChecksoption(KotlinFeature.NewStrictNullChecks) has been added which greatly improves thr oughput. - #889: Kotlin has been upgraded to 1.9.25
-
#910: A default
KeyDeserializerforvalue classhas been added. This eliminates the need to have a customKeyDeserializerfor eachvalue classwhen using it as a key in aM ap, if only simple boxing is needed. -
#929: Fixed a problem with the
NullToEmptyCollectionandNullToEmptyMapoptions being applied to non-parameters in thehasRequiredMarkerprocess. -
#937: For
readValueand other shorthands forObjectMapperdeserialization methods, type consistency checks have been added. ARuntimeJsonMappingExceptionwill be thrown in case of inconsistency. - #944: Common util is now used for member accessibility overrides.
-
#954: Replaced
OptBooleanof internal caching with a common implementation. -
#959: Extension functions has been added to simplify
configOverridecalls toObjectMapperandModule.SetupContext.
- #702 Handle token reading issue in ScalaObjectDeserializer
- #706 Upgrade paranamer dependency to 2.8.3
- #722 Collection deserializer should create empty collection instead of null (when input is null)
- #200: Narrow types to format specific (e.g. CBORMapper) when resolving via JAX-RS Providers
- #36: Narrow types to format specific (e.g. CBORMapper) when resolving via JAX-RS Providers
-
#171: Add a
JSON.Feature.WRITE_RECORD_FIELDS_IN_DECLARATION_ORDERfor retaining Serialization order of Java Records (instead of alphabetic)