Skip to content

Jackson Release 2.19

Tatu Saloranta edited this page Feb 6, 2025 · 34 revisions

Jackson Version 2.19 development is on-going in January, 2025.

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

Status

Branch is under development.

Patches

No release yet

Documentation

Articles, Blog posts

Changes, compatibility

Compatibility: platform requirements

Android

Same as Jackson 2.18, SDK 26

JDK

Same as Jackson 2.18

Kotlin

Changes, behavior

JsonPointer

  • 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

Major focus area(s)

Most wanted Features to implement

Most wanted Features implemented

  • #1467: Support @JsonUnwrapped with @JsonCreator

Most wanted Features considered but not implemented


Full Change list

Changes, core

  • No changes since 2.18
  • #1328: Optimize handling of JsonPointer.head()
  • #1356: Make JsonGenerator::writeTypePrefix method to not write a WRAPPER_ARRAY when typeIdDef.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
  • #1467: Support @JsonUnwrapped with @JsonCreator
  • #2145: Add JsonNode.optional(String name) and optional(int index) methods
  • #2461: Nested @JsonUnwrapped property names not correctly handled
  • #2951: Allow inverting @JsonProperty(access=) with MapperFeature.INVERSE_READ_WRITE_ACCESS to work differently on server and client side
  • #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
  • #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
  • #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
  • #4934: DeserializationContext.readTreeAsValue() handles null nodes differently from ObjectMapper.treeToValue()

Changes, data formats

Avro

  • #308: Incorrect serialization for LogicalType.Decimal (Java BigDecimal)
  • #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

CSV

  • #502: Header names seem to be trimmed (add CsvParser.Feature.TRIM_HEADER_SPACES))

Smile

  • #300: Floats are encoded with sign extension while doubles without

YAML

  • #502: Add an optional extended parser subclass (YAMLAnchorReplayingFactory) able to inline anchors

Changes, datatypes

Guava

  • #1: Add deserialization support for Table<R, C, V>
  • #336: Optimize InstantDeserializer addInColonToOffsetIfMissing()
  • #337: Negative Duration does not round-trip properly with WRITE_DURATIONS_AS_TIMESTAMPS enabled

Changes, Other modules

Changes, JVM Languages

  • #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.

Changes, Providers

  • #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

Changes, other

  • #171: Add a JSON.Feature.WRITE_RECORD_FIELDS_IN_DECLARATION_ORDER for retaining Serialization order of Java Records (instead of alphabetic)
Clone this wiki locally