Skip to content

Jackson Release 3.1

Tatu Saloranta edited this page Jan 12, 2026 · 62 revisions

Jackson Version 3.1 is being developed, as of October 2025.

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

Status

Version is under development (under branch 3.x)

Patches

No release yet.

Documentation

Articles, Blog posts

New Modules

Changes, packaging

Changes, compatibility

Android

Same as Jackson 3.0, SDK 34

JDK

Same as Jackson 3.0: JDK 17

Kotlin

Same as Jackson 3.0?

Changes, behavior

Missing/absent AtomicReference deserialization

With databind#5350 -- addition of DeserializationFeature.USE_NULL_FOR_MISSING_REFERENCE_VALUES -- the default deserialization behavior of AtomicReference<T> changes to same as that of Optional<T>:

  • If value is missing (absent) from incoming JSON AND AtomicReference is passed through Constructor, "empty" value (new AtomicReference<>(null)) will be deserialized instead of null (as previously).
  • Change necessary to add configurability, improves consistency.

Major focus area(s)

Most wanted Features implemented

  • databind#1196: Add support for collecting multiple deserialization failures during processing, not just the first one
  • #1497: Allow skipping @JsonUnwrapped values if no properties matched, DeserializationFeature.USE_NULL_FOR_EMPTY_UNWRAPPED enabled
  • databind#1516: Problem with multi-argument Creator with @JsonBackReference property
  • databind#1981: Add method remove(JsonPointer) in ContainerNode

Full Change list

Changes, core

No separate 3.x versions released, uses jackson-annotations 2.21.

  • #784: Optional leading plus sign not included in textual value of any integral nor all floating-point numbers
  • #1506: Non-blocking parser parses numbers eagerly; does not report error with missing space
  • #1514: Additional configuration to closer match Jackson 2 behavior
  • #1527: TokenStreamFactory.createNonBlockingByteBufferParser() return type wrong
  • #221: Support alternate radixes when writing numeric values as strings
  • #650: @JsonUnwrapped prevents checks for DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES
  • #1196: Add support for collecting multiple deserialization failures during processing, not just first one
  • #1419: JsonFormat.Shape.POJO does not work for Map.Entry via property annotation
  • #1497: Allow skipping @JsonUnwrapped values if no properties matched, DeserializationFeature.USE_NULL_FOR_EMPTY_UNWRAPPED enabled
  • #1516: Problem with multi-argument Creator with @JsonBackReference property
  • #1649: @JsonInclude(content=) not working for Map-valued properties via POJO class annotation
  • #1654: @JsonTypeInfo(use = JsonTypeInfo.Id.NONE) override on property is ignored
  • #1981: Add method remove(JsonPointer) in ContainerNode
  • #2124: Allow coercion of '[ ]' into empty/null String with ACCEPT_EMPTY_ARRAY_AS_NULL_OBJECT
  • #2438: Prevent use of setter/field in case Creator property already exists, duplicate value seen
  • #2686: @JsonBackReference does not work with a builder
  • #3964: Deserialization issue: MismatchedInputException, Bean not yet resolved
  • #4118: Deserialization of a certain kinds of parametrized properties fail to resolve ? into expected bounds, resulting in LinkedHashMap
  • #4157: Add MapperFeature.INFER_RECORD_GETTERS_FROM_COMPONENTS_ONLY to ignore getter method auto-detection for Records
  • #4277: Deserialization @JsonFormat(shape = JsonFormat.Shape.ARRAY) POJO with JsonTypeInfo.As.EXTERNAL_PROPERTY does not work
  • #4629: @JsonIncludeProperties and @JsonIgnoreProperties ignored when deserializing Records
  • #4690: InvalidDefinitionException "No fallback setter/field defined for creator property" when deserializing JSON with dup property to single-property Record
  • #4708: JsonTypeInfo.Id.DEDUCTION should blocks signatures for non-instantiable types (abstract classes, interfaces)
  • #5115: @JsonUnwrapped Record deserialization can't handle name collision
  • #5184: @JsonIgnore on record method applied to record matching field at deserialization
  • #5188: Prevent use of unsupported @JsonManagedReference/@JsonBackReference for Record-valued properties
  • #5350: Add DeserializationFeature.USE_NULL_FOR_MISSING_REFERENCE_VALUES for selecting null vs "empty/absent" value when deserializing missing Optional value
  • #5361: Fix Maven SBOM publishing (worked in 3.0.0-rc4 but not in rc5 or later)
  • #5369: Support @JsonInclude.content for Collections (with SerializationFeature.APPLY_JSON_INCLUDE_FOR_CONTAINERS)
  • #5405: @JsonFormat(shape = Shape.POJO) does not work for java.util.Map serialization via property annotation
  • #5413: Add/support forward reference resolution for array values
  • #5442: Make JsonMapper/ObjectMapper fully proxyable by CGLIB
  • #5456: Additional configuration (JsonNodeFeature.STRIP_TRAILING_BIGDECIMAL_ZEROES: true) to MapperBuilder#configureForJackson2 to closer match Jackson 2 behavior
  • #5475: Support @JsonDeserializeAs annotation
  • #5476: Support @JsonSerializeAs annotation
  • #5515: Support @JsonInclude.content for Arrays
  • #5519: Add 2 new JavaTimeFeatures: (TRUNCATE_TO_MSECS_ON_WRITE, TRUNCATE_TO_MSECS_ON_READ) for truncating java.time values before serialization, after deserialization
  • #5522: @JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY) doesn't work on custom Collection subclass
  • #5528: TreeBuildingGenerator#writeNumber(String) writes Number as String
  • #5537: Add missing @JsonIdentityInfo handling for implicit Collections with DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY
  • #5541: Add missing @JsonIdentityInfo handling for implicit arrays with DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY
  • #5542: ObjectReader.readValue() does not fail when DeserializationFeature.FAIL_ON_UNRESOLVED_OBJECT_IDS enabled
  • date-time#359: InstantDeserializer deserializes the nanosecond portion of fractional negative timestamps incorrectly
    • NOTE: ported over to embedded Java 8 Date/Time functionality

Changes, data formats

Avro

  • #619: Add isEnabled() methods for format-specific features to mappers
  • #628: Uncommon parent pom dependency configuration in Jackson 2.20/3.0

CBOR

  • #619: Add isEnabled() methods for format-specific features to mappers
  • #628: Uncommon parent pom dependency configuration in Jackson 2.20/3.0

CSV

  • #479: STRICT_CHECK_FOR_QUOTING does not quote value that contains newline character
  • #581: Add isEnabled() methods for format-specific features to mappers

Ion

  • #619: Add isEnabled() methods for format-specific features to mappers
  • #623: Upgrade ion-java dep to 1.11.11 (from 1.11.10)
  • #628: Uncommon parent pom dependency configuration in Jackson 2.20/3.0
  • #629: Unnecessary IOException in IonObjectMapper method signatures

Protobuf

  • #598: Protobuf parser state handling wrong for implicit close (END_OBJECT)
  • #628: Uncommon parent pom dependency configuration in Jackson 2.20/3.0

Smile

  • #619: Add isEnabled() methods for format-specific features to mappers
  • #628: Uncommon parent pom dependency configuration in Jackson 2.20/3.0

TOML

  • #581: Add isEnabled() methods for format-specific features to mappers
  • #780: Add isEnabled() methods for format-specific features to mappers

YAML

  • #568: YAML - ScannerException on block scalar "\n"
  • #581: Add isEnabled() methods for format-specific features to mappers
  • #590: Upgrade to the latest version of SnakeYAML Engine (3.0.1)
  • #596: Port YAMLAnchorReplayingFactory from 2.x and improve it to handle nested anchors

Changes, data types

Joda Money

    • #581: Add field-level amount representation for Joda-Money (@JodaMoney annotation)

Changes, Other modules

Afterburner

  • #317: Update byte-buddy to latest (1.17.8) from 1.15.1

Mr Bean

  • #317: Update byte-buddy to latest (1.17.8) from 1.15.1
  • #320: Remove byte-buddy shading from 3.1 MrBean

Changes, Providers

  • #226: Add constructor accepting JsonMapperConfigurator to Jackson(Jaxb)JsonProvider
  • #63: Add constructors accepting [Format]MapperConfigurator to providers

Changes, other

N/A

Clone this wiki locally