-
-
Notifications
You must be signed in to change notification settings - Fork 1.2k
Jackson Release 2.19
Tatu Saloranta edited this page Apr 28, 2025
·
84 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 open for patch releases.
- 2.19.1 (not yet released)
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~0
or~1
escape sequence) changed:-
#1361:
JsonPointer
parsing 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
@JsonUnwrapped
with@JsonCreator
-
#280: Minor change to
module-info.java
: use "open module" - #281: [gradle-module-metadata-maven-plugin] update to version 1.0
-
#284: Add
OptBoolean
valued@JsonProperty.isRequired
to (eventually) replace@JsonProperty.required
-
#633: Allow skipping
RS
CTRL-CHAR to support JSON Text Sequences -
#1144:
FilteringParserDelegate
can go into an infinite loop if underlying parser is non-blocking -
#1328: Optimize handling of
JsonPointer.head()
-
#1356: Make
JsonGenerator::writeTypePrefix
method to not write aWRAPPER_ARRAY
whentypeIdDef.id == null
-
#1361:
JsonPointer
parsing 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
JsonReadContext
non-final
-
#1467: Support
@JsonUnwrapped
with@JsonCreator
-
#2145: Add
JsonNode.optional(String name)
andoptional(int index)
methods -
#2461: Nested
@JsonUnwrapped
property names not correctly handled -
#2951: Allow inverting
@JsonProperty(access=)
withMapperFeature.INVERSE_READ_WRITE_ACCESS
to work differently on server and client side -
#3343: Allow BeanPropertyWriter Sub-classes to Override
get()
(removefinal
) -
#4388: Allow using
@JsonPropertyOrder
with "any" (@JsonAnyGetter
) properties -
#4533: Add
MapperFeature.REQUIRE_HANDLERS_FOR_JAVA8_TIMES
to disable the "Java 8 date/time XYZ not supported by default" error -
#4650:
PrimitiveArrayDeserializers
should deal with single String value ifDeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY
enabled - #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.class
in 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.DEDUCTION
where sub-types are Object and Array -
#4773:
SerializationFeature.ORDER_MAP_ENTRIES_BY_KEYS
should not apply to Maps with uncomparable keys -
#4801: Add
JsonNodeFeature.USE_BIG_DECIMAL_FOR_FLOATS
to 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
@JsonCreator
annotated 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.ARRAY
does not work when there is@JsonAnyGetter
-
#4963: Serializing
Map.Entry
as Bean with@JsonFormat.shape = Shape.OBJECT
fails on JDK 17+ -
#4979: Allow default enums with
@JsonCreator
-
#4997:
ObjectNode
put methods should do null check for key -
#5006: Add
MapperFeature.REQUIRE_HANDLERS_FOR_JAVA8_OPTIONALS
to prevent failure ofjava.util.Optional
(de)serialization without Java 8 module -
#5014: Add
java.lang.Runnable
as unsafe base type inDefaultBaseTypeLimitingValidator
-
#5020: Support new
@JsonProperty.isRequired
for overridable definition of "required-ness" -
#5027: Add
DeserializationFeature.FAIL_ON_SUBTYPE_CLASS_NOT_REGISTERED
-
#5052: Minor bug in
FirstCharBasedValidator.forFirstNameRule()
: returnsnull
in non-default case -
#5063:
SimpleModule
not registered due togetTypeId()
returning an empty string -
#5069: Add copy-constructor for
MappingIterator
-
#308: Incorrect serialization for
LogicalType.Decimal
(JavaBigDecimal
) -
#388:
@JsonEnumDefaultValue
not 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:
XmlMapper
is unable to deserialise into an empty record -
#714: Root-level
null
handling (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
InstantDeserializer
addInColonToOffsetIfMissing()
-
#337: Negative
Duration
does not round-trip properly withWRITE_DURATIONS_AS_TIMESTAMPS
enabled -
#342: Lenient deserialization of
LocalDate
,LocalDateTime
is not time-zone aware - #364: Deserialization of Month in ONE_BASED_MONTHS mode fails for value "12"
-
#285:
JacksonBlackbirdAccess
Class 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
MissingKotlinParameterException
secondary 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
MissingKotlinParameterException
has been changed toInvalidNullException
. -
#885: A new
StrictNullChecks
option(KotlinFeature.NewStrictNullChecks) has been added which greatly improves thr oughput. - #889: Kotlin has been upgraded to 1.9.25
-
#910: A default
KeyDeserializer
forvalue class
has been added. This eliminates the need to have a customKeyDeserializer
for eachvalue class
when using it as a key in aM ap
, if only simple boxing is needed. -
#929: Fixed a problem with the
NullToEmptyCollection
andNullToEmptyMap
options being applied to non-parameters in thehasRequiredMarker
process. -
#937: For
readValue
and other shorthands forObjectMapper
deserialization methods, type consistency checks have been added. ARuntimeJsonMappingException
will be thrown in case of inconsistency. - #944: Common util is now used for member accessibility overrides.
-
#954: Replaced
OptBoolean
of internal caching with a common implementation. -
#959: Extension functions has been added to simplify
configOverride
calls toObjectMapper
andModule.SetupContext
.
- #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_ORDER
for retaining Serialization order of Java Records (instead of alphabetic)