Skip to content

Jackson Release 3.2

Tatu Saloranta edited this page Mar 16, 2026 · 162 revisions

Jackson Version 3.2 is under development as of February, 2026.

This wiki page gives a list of links to all changes (with brief descriptions) that will be included.

Status

Version is under development (under branch 3.x).

It will likely NOT be designated as Long-Term-Support (LTS) since 3.1 is an LTS.

Patches

No release yet.

Documentation

Articles, Blog posts

Changes, compatibility

Android

Up to SDK 34 for all components (Jackson 3.1 had SDK 26 for jackson-core, 34 for jackson-databind). Verified by "Animal Sniffer" plug-in.

JDK

Same as Jackson 3.1; Java 17.

Kotlin

Same as Jackson 3.1?

Compatibility: datatype modules

No changes.

Changes, behavior

Databind

Default changes

  • #1329 -- External type property (@JsonTypeInfo(include = As.EXTERNAL_PROPERTY)) deserialized even if visible = false -- fixed to now properly consider visibility
    • Fixes behavior but since wrong behavior has been in for a long time (since Jackson 2.7), a new MapperFeature.EXTERNAL_TYPE_ID_ALWAYS_VISIBLE (default: false) was added: it can be enabled to change behavior back to pre-3.2. (i.e. External Type Id property always visible)
  • #5734 -- "DeserializationFeature.FAIL_ON_NULL_FOR_PRIMITIVES treats absent field same as explicit null" -- changed handling so missing primitive values no longer fail unless DeserializationFeature.FAIL_ON_MISSING_CREATOR_PROPERTIES is enabled

Major focus area(s)

Most wanted Issues resolved

Issues with at least 5 thumbs-ups that were resolved in this version:

  • #1757: Regression in JsonInclude.Include.NON_DEFAULT set as global default serialization inclusion (add new MapperFeature.USE_REAL_INCLUDE_NON_DEFAULT)

Full Change list

Changes, core

N/A

  • #679: Number parsing should fail for trailing dot (period)
  • #1544: Validate read() parameters in MergedStream and UTF32Reader
  • #1545: Increase Android baseline from 26 to 34 in Jackson 3.2
  • #1564: Add SimpleStreamReadContext.rollbackValueRead() method
  • #1570: Fail parsing from DataInput if StreamReadConstraints.getMaxDocumentLength() set
  • #639: @JacksonInject with @JsonIdentityInfo causes deserialization failure (unresolved forward reference)
  • #1075: @JsonUnwrapped fields with matching @JsonIgnored getter in outer class are ignored
  • #1281: @JsonIgnoreProperties should work for "any getter" (for serialization)
  • #1298: Writing ObjectId reference for @JsonUnwrapped property fails with obscure error message
  • #1329: External type property (@JsonTypeInfo(include = As.EXTERNAL_PROPERTY)) deserialized even if visible = false
  • #1410: Overlap between @JsonTypeInfo.As.PROPERTY indicated type id and field with same name results in UnrecognizedPropertyException
  • #1515: @JsonSerialize(Typing.DYNAMIC) in some cases does not override MapperFeature.USE_STATIC_TYPING
  • #1622: Failure to deserialize child object when using @JsonIgnoreProperties to break cycle
  • #1706: @JsonCreator not working properly with @JsonIdentityInfo when deserializing a collection of interfaces (immutables.io compatibility)
  • #1755: Get NPE on deserializing values with recursive @JsonIgnoreProperties
  • #1757: Regression in JsonInclude.Include.NON_DEFAULT set as global default serialization inclusion (add new MapperFeature.USE_REAL_INCLUDE_NON_DEFAULT)
  • #2039: @JsonUnwrapped and JsonTypeInfo.As.EXTERNAL_PROPERTY in the same bean doesn't work
  • #2572: Can't deserialize inner class if default setter is Nulls.AS_EMPTY
  • #2780: Deserialization with Default Typing and @JsonIdentityInfo in untyped collections fails
  • #3030: Correctly deserialize forward @JsonIdentityInfo references when using @JsonCreator
  • #3064: @JsonPropertyOrder(alphabetic=true) is ignored in case indices are defined for @JsonProperty -- add MapperFeature.SORT_PROPERTIES_BY_INDEX
  • #3194: Deserialization of 2-dimensional arrays of final types fails when using DefaultTyping.NON_FINAL
  • #3216: Delegating @JsonCreator does not prevent unnecessary introspection of properties, leading to bogus failure
  • #3355: Deserialization fails depending on the order of deserialized objects with "Cannot construct instance (although at least one Creator exists)"
  • #3573: Inconsistent handling of nil UUID in property inclusion
  • #3591: Ignored fields not consistently exposed via BeanDescription.getIgnoredPropertyNames()
  • #5353: Preserve order of @JsonAnySetter creator property arguments
  • #5615: JsonMapper seems to be not thread-safe when using the polymorphic JsonTypeInfo.As.PROPERTY definition (and @JsonIgnoreProperties)
  • #5727: VisibilityChecker overrides equals() without overriding hashCode()
  • #5734: DeserializationFeature.FAIL_ON_NULL_FOR_PRIMITIVES treats absent field same as explicit null

Changes, data formats

Avro

  • #611: Remove IOException from AvroMapper.schemaFrom() method signatures

Smile

  • #674: Smile parser does not update StreamReadContext index or entry count
  • #8: Serialization of List incorrect if property declared as plain java.lang.Object
  • #149: @JacksonXmlElementWrapper as a @JsonCreator parameter not working
  • #517: XML wrapper doesn't work with java records
  • #615: Deserialization of Xml with @JacksonXmlText using @JsonCreator (into java.util.Map) fails
  • #735: Java Record with @JacksonXmlText stopped working with 2.18
  • #795: HttpHeader object (= ) is not wrapped by the XML <property> tag
  • #802: Serialization with Polymorphisme and EXTERNAL_PROPERTY = duplicate property

Clone this wiki locally