-
-
Notifications
You must be signed in to change notification settings - Fork 1.2k
Jackson Release 3.2
Tatu Saloranta edited this page Jun 9, 2026
·
162 revisions
Jackson Version 3.2 was released June 8, 2026.
This wiki page gives a list of links to all changes (with brief descriptions) that are included.
Version is under development (under branch 3.x).
It will NOT be designated as Long-Term-Support (LTS) since 3.1 is an LTS.
- 3.2.1 (Not yet released)
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.
Same as Jackson 3.1; Java 17.
Same as Jackson 3.1?
No changes.
-
#1329 -- External type property (
@JsonTypeInfo(include = As.EXTERNAL_PROPERTY)) deserialized even ifvisible = 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)
- Fixes behavior but since wrong behavior has been in for a long time (since Jackson 2.7), a new
-
#5734 -- "
DeserializationFeature.FAIL_ON_NULL_FOR_PRIMITIVEStreats absent field same as explicitnull" -- changed handling so missing primitive values no longer fail unlessDeserializationFeature.FAIL_ON_MISSING_CREATOR_PROPERTIESis enabled
Issues with at least 5 thumbs-ups that were resolved in this version:
-
databind#1757: Regression in
JsonInclude.Include.NON_DEFAULTset as global default serialization inclusion (add newMapperFeature.USE_REAL_INCLUDE_NON_DEFAULT) - dataformat-xml#90: Add support for adding attributes to output for root element
-
dataformat-xml#150: Allow specifying DOCTYPE declaration (
<!DOCTYPE root ...>) to write - dataformat-xml#207: Allow custom prefixes for Namespaces
-
dataformat-xml#247:
@JacksonXmlRootElementdoes not enforce the local name during deserialization (addXmlReadFeature.ENFORCE_ROOT_ELEMENT_NAME) -
dataformat-xml#306: Can not use
@JacksonXmlTextfor Creator property (creator parameter) - dataformat-xml#315: Allow specifying encodings other than UTF-8 in XML declaration written
-
dataformats-text#36: Allow emitting YAML comments (
YAMLGenerator.writeComment())
No separate 3.x versions released, uses jackson-annotations 2.22.
- #679: Number parsing should fail for trailing dot (period)
-
#707: Add
JsonReadFeature.ALLOW_HEXADECIMAL_NUMBERSfor JSON5-style hexadecimal integer literals -
#1211: Add
JsonParser.willInternPropertyNames()to check whether property name interning is enabled -
#1544: Validate
read()parameters inMergedStreamandUTF32Reader - #1545: Increase Android baseline from 26 to 34 in Jackson 3.2
-
#1564: Add
SimpleStreamReadContext.rollbackValueRead()method -
#1575: Implement document length tracking for
DataInput-backed JSON parsers via subclass - #1576: Use Java 17 intrinsics for long multiplication
-
#1593: Add
JsonGenerator.writeComment(String),JsonGenerator.canWriteComments() -
#1598: Possible TOCTOU timing bug in
BufferRecycler
-
#639:
@JacksonInjectwith@JsonIdentityInfocauses deserialization failure (unresolved forward reference) -
#644: Allow skipping writing of type id if type to serialize is
defaultImpl -
#1075:
@JsonUnwrappedfields with matching@JsonIgnored getter in outer class are ignored -
#1281:
@JsonIgnorePropertiesshould work for "any getter" (for serialization) -
#1298: Writing ObjectId reference for
@JsonUnwrappedproperty fails with obscure error message -
#1329: External type property (
@JsonTypeInfo(include = As.EXTERNAL_PROPERTY)) deserialized even ifvisible = false -
#1410: Overlap between
@JsonTypeInfo.As.PROPERTYindicated type id and field with same name results inUnrecognizedPropertyException - #1496: Support use of Object IDs with Builders
-
#1515:
@JsonSerialize(Typing.DYNAMIC)in some cases does not overrideMapperFeature.USE_STATIC_TYPING -
#1528:
@JsonTypeInfovisible property set tonullin defaultImpl class - #1546: Resolving forward references of collections might result in corrupt behaviour
-
#1622: Failure to deserialize child object when using
@JsonIgnorePropertiesto break cycle -
#1706:
@JsonCreatornot working properly with@JsonIdentityInfowhen deserializing a collection of interfaces (immutables.io compatibility) -
#1755: Get NPE on deserializing values with recursive
@JsonIgnoreProperties -
#1757: Regression in
JsonInclude.Include.NON_DEFAULTset as global default serialization inclusion (add newMapperFeature.USE_REAL_INCLUDE_NON_DEFAULT) -
#1921:Reader for updating do not use
@JsonCreatorconstructor -
#2039:
@JsonUnwrappedandJsonTypeInfo.As.EXTERNAL_PROPERTYin the same bean doesn't work -
#2100: Using
ObjectReader.withValueToUpdate()with JsonPOJOBuilder no longer working -
#2572: Can't deserialize inner class if default setter is
Nulls.AS_EMPTY -
#2736: Unable to deserialize
@JsonUnwrappedOptional<>field -
#2747:
@JsonTypeInfo(include = EXTERNAL_PROPERTY)exposes bogus array viaJsonStreamContextduring deserialization -
#2780: Deserialization with Default Typing and
@JsonIdentityInfoin untyped collections fails -
#2883: Annotation
@JsonUnwrappedcan serialize duplicate properties - #2955: Handling UnresolvedForwardReference by pre-processing illegal values
-
#3030: Correctly deserialize forward
@JsonIdentityInforeferences when using@JsonCreator -
#3064:
@JsonPropertyOrder(alphabetic=true)is ignored in case indices are defined for@JsonProperty-- addMapperFeature.SORT_PROPERTIES_BY_INDEX -
#3083:
@JsonIncludePropertiescould be used like@JsonPropertyOrder -
#3166: Ability to sort
Sets before serialization (addSerializationFeature.ORDER_SET_ELEMENTS) -
#3169:
@JsonIncludePropertiesdoes not work together with@JsonIdentityInfo -
#3178:
@JsonUnwrappeddeserialization results in empty nested object when using prefix -
#3185:
@JsonIdentityInfowith@JsonCreatorincorrectly sets a field -
#3194: Deserialization of 2-dimensional arrays of final types fails when using
DefaultTyping.NON_FINAL - #3209: Polymorphism with aliases fails to utilize alias fields
-
#3216: Delegating
@JsonCreatordoes not prevent unnecessary introspection of properties, leading to bogus failure - #3205: ConfigOverrides for merging are not applied for items inside containers
- #3229: Existing instance of a local/anonymous Class cannot be updated
-
#3316: Deserialization of a date with
@JsonFormatspecified with locale that is not a language tag - #3355: Deserialization fails depending on the order of deserialized objects with "Cannot construct instance (although at least one Creator exists)"
-
#3547: When using type id with
As.EXTERNAL_PROPERTYtogether with@JsonValueinside type the serialiser omits external type id field from result when@JsonValuevalue is null -
#3573: Inconsistent handling of nil
UUIDin property inclusion -
#3591: Ignored fields not consistently exposed via
BeanDescription.getIgnoredPropertyNames() -
#3604: Allow use of
JsonNodefield for@JsonAnyGetter -
#4014: No way to combine
@JsonTypeInfo(include = As.PROPERTY)and@JsonIdentityInfo(generator = PropertyGenerator.class) -
#4758:
ConfigOverrideusingNulls.AS_EMPTYdoes not work with@JsonManagedReference -
#4983:
JsonTypeInfo.Id.MINIMAL_CLASSgenerates invalid type on sub-package - #5281: Reading into existing instance uses creator property setup instead of mutator (setter, field)
-
#5330:
@JsonPropertyon enum values with@JsonFormat(shape = JsonFormat.Shape.NUMBER)is ignored -
#5353: Preserve order of
@JsonAnySettercreator property arguments -
#5615: JsonMapper seems to be not thread-safe when using the polymorphic
JsonTypeInfo.As.PROPERTYdefinition (and@JsonIgnoreProperties) -
#5727:
VisibilityCheckeroverridesequals()without overridinghashCode() -
#5734:
DeserializationFeature.FAIL_ON_NULL_FOR_PRIMITIVEStreats absent field same as explicitnull - #5745: Ability to change active JsonView on submodels (with `@JsonApplyView')
-
#5821: Fix dead code and side-effect bug in
BeanPropertyWriter.toString() -
#5851: Regression of
JsonTypeInfo.Id.MINIMAL_CLASSin the 3.x branch -
#5860: Add new extension point for
ObjectMapper,ObjectWriter: handlerGeneratorInitializercalled immediately afterJsonGeneratorcreated, before used -
#5861: Allow injecting
MissingNodefor "absent"JsonNodevia Creator (withJsonNodeFeature.MAP_ABSENT_TO_MISSING) -
#5872: ObjectId resolution with Builder fails for interface types (
UnresolvedForwardReference) -
#5897: Excessive
TokenBufferallocations when deserializing records - #5909: Forward Object Id references inside Collection properties leak Builder instance (follow-up to #1496)
-
#5937: Add
SerializationContext.withActiveView() -
#5946: Forward Object Id references inside typed Array (T[] where T is NOT
java.lang.Object) not handled correctly -
#5952:
@JsonIgnoredoes not prevent passing of property to@JsonAnySetter -
#5958:
@JsonViewignored with@JsonTypeInfo(include = As.EXTERNAL_PROPERTY) -
#5960: Deprecate un-maintained
tools.jackson.databind.jsontype.impl.SubTypeValidator -
#5975: Parameters with an
ImplicitPropertyNamethat matches the name of a property marked asREAD_ONLYare ignored during deserialization -
#5977: Apply per-property DYNAMIC typing override to
ObjectArraySerializer -
#5980: Property-based Creator clobbers enclosing value's
JsonParser.currentValue() -
#6010:
WRITE_ENUMS_TO_LOWERCASEmust useLocale.ROOTfor case folding -
#6017: Make
@JsonUnwrappedcompatible with@JsonSerialize(converter = )
-
#611: Remove
IOExceptionfromAvroMapper.schemaFrom()method signatures
-
#9: Incorrect detection of
hasNextValue()for simple iteration withString[] -
#210: Quote strings with leading/trailing spaces in csv (
CsvWriteFeature.QUOTE_STRINGS_WITH_LEADING_TRAILING_WHITESPACE) -
#264:
CsvMapperapplies alphabetic Property Order for Java Records -
#327: Catch and report duplicate column names in header line (add
CsvReadFeature.FAIL_ON_DUPLICATE_HEADER_COLUMNS) -
#355: Allow mapping empty cells (columns) as "absent" properties (i.e. skip) by
CsvReadFeature.EMPTY_UNQUOTED_STRING_AS_MISSING - #368: Allow skipping csv rows with only empty values (line of commas)
-
#631: Add
CsvFactory.builder().maxQuoteCheckChars()for configuring heuristic quoting check -
#634: Support for
StreamReadConstraints.maxNameLengthfor CSV parsing -
#643:
CsvParserdoesn't handle whitespace outside of quoted values correctly -
#657: CSV header validation ignores
ACCEPT_CASE_INSENSITIVE_PROPERTIES: addCsvReadFeature.CASE_INSENSITIVE_HEADERS
-
#638: Support for
StreamReadConstraints.maxNameLengthandmaxStringLengthfor Properties parsing
-
#674: Smile parser does not update
StreamReadContextindex or entry count
- #663: TOML parser: int64 max value parsed as truncated long
- #664: TOML parser: space separator in offset/local datetime not accepted
- #665: TOML parser: leading UTF-8 BOM rejected as 'Unknown token'
- #666: TOML parser: invalid UTF-8 byte sequences not rejected
- #667: TOML parser: out-of-range datetime/date/time field values not rejected
- #668: TOML parser: surrogate-half unicode escapes accepted in strings
- #669: TOML parser: invalid dotted-key extension of explicit tables / AOT not rejected
- #685: Improve TOML 1.1.0 compatibility (parsing)
-
#8: Serialization of
Listincorrect if property declared as plainjava.lang.Object -
#27:
@JacksonXmlElementWrapperconflicting getter/setter definitions for property - #90: Add support for adding attributes to output for root element
-
#149:
@JacksonXmlElementWrapperas a@JsonCreatorparameter not working -
#150: Allow specifying DOCTYPE declaration (
<!DOCTYPE root ...>) to write - #192: Two wrapped lists with items of same name conflict
- #207: Allow custom prefixes for Namespaces
-
#247:
@JacksonXmlRootElementdoes not enforce the local name during deserialization (addXmlReadFeature.ENFORCE_ROOT_ELEMENT_NAME) -
#248:
@JacksonXmlPropertywith attributes raises an exception when used with@JsonIdentityInfo -
#299:
@JsonUnwrappedwith a@JacksonXmlElementWrapper(useWrapping=false)on a collection fails reading from XML -
#306: Can not use
@JacksonXmlTextfor Creator property (creator parameter) - #315: Allow specifying encodings other than UTF-8 in XML declaration written
-
#334:
@JacksonXmlElementWrapper(useWrapping=false)fails when using aDeserializerModifierthat delegates -
#344: Unable to (de)serialize
nullin polymorphic Collection -- may need to usexsi:nilhandling? -
#358: Allow skipping attributes from the
http://www.w3.org/2001/XMLSchema-instancenamespace (with newXmlReadFeature.SKIP_UNKNOWN_XSI_ATTRIBUTES) -
#426:
InvalidTypeIdExceptionwhen parsing XML to POJO containing nestedList<>, customTypeIdResolver -
#448: Allow use of
@JsonRawValuewithout wrapping element - #449: Trouble dealing with JacksonXMLText if properties are present or if element is in a collection
-
#452: Allow adding
<?xml-stylesheet ...>declarations (Processing Instructions) - #455: Can't deserialize list in JsonSubtype when type property is visible
-
#484: Add
FromXmlParser.Feature.WRAP_ROOT_ELEMENT_NAMEto allow lossless round-trip via Tree Model -
#496: Root name missing when root element has no attributes (add
FromXmlParser.getRootElementName()) -
#514: Deserialisation to polymorphic class using
JsonTypeInfo.Id.DEDUCTIONand@JacksonXmlElementWrapperannotation fails - #517: XML wrapper doesn't work with java records
- #525: Order of XML Properties trigger different behaviors with polymorphic nested objects
- #541: Allow specifying URI of the default namespace for root element
-
#556:
XmlMapperdoes not support multi-dimensional arrays -
#565: Blank text is ignored in
@JacksonXmlText -
#561: Deserializing empty timestamp fields to
nullvalue doesn't work (instead becomes "empty", Epoch time) - #567: First element in unwrapped XML array is ignored during deserialization to base class
- #608: Jackson fails to instantiate class when only text node is present
-
#615: Deserialization of Xml with
@JacksonXmlTextusing@JsonCreator(intojava.util.Map) fails -
#627: Disabling wrapper on list (
defaultUseWrapper = false) does not serialize/deserializenulllists as expected -
#629:
@JsonAnySettermangles nested xml Elements and Attributes during serialization -
#665:
@JacksonXmlPropertyappears to behave differently than@JsonPropertywhen used on java records -
#735: Java Record with
@JacksonXmlTextstopped working with 2.18 -
#762: Unwrapping lists does not work inside
@JsonUnwrapped -
#767: Unwrapped lists cannot be deserialized when using
JsonTypeInfo.As.EXISTING_PROPERTY -
#795:
HttpHeaderobject (= ) is not wrapped by the XML<property>tag -
#802: Serialization with Polymorphisme and
EXTERNAL_PROPERTY= duplicate property -
#845: Implement
JsonGeneratormethodswriteComment()andcanWriteComments() - #849: Allow writing Comments in Document Prolog (before root element)
-
#853:
InvalidDefinitionExceptionon classes using@JacksonXmlElementWrapperand@JacksonXmlProperty -
#857:
@JacksonXmlTextwith unwrapped Collection property fails to deserialize list (skips virtual wrapping)
-
#22: YAML anchors don't seem to work with
@JsonCreator -
#25: YAML anchor error when
@JsonSubTypesused -
#36: Allow emitting YAML comments (
YAMLGenerator.writeComment()) -
#109:
YAMLMapperdoesn't close output file if an error occurs -
#214: Expose custom tags via
YAMLParser.getRawTag() -
#276: Support opting out of octal number interpretation (like "0444"); add
YAMLReadFeature.PARSE_OCTAL_NUMBERS -
#292: YAML anchor
UnresolvedForwardReferencewith builder - #623: Add support for YAML 1.2 non-finite (Infinite, -Infinite, NaN) numbers, Octal notation
-
#636: Support for
StreamReadConstraints.maxNameLengthandmaxStringLengthfor YAML parsing
-
#85: Upgrade
com.sun.mail:jakarta.maildependency from 2.0.1 to 2.0.2
-
#183: Bump
joda-timedependency to2.14.1
-
#314:
ObjectMapperwithjackson-module-afterburner:java.lang.IllegalStateException: Multiple definitions of method getBody found - #345: Improve Afterburner testing, access checks
- #347: Add "afterburner-tests"; enhanced Afterburner-for-classpath tests
-
#348: Afterburner parent-classloader caching silently broken on Java 9+ without
--add-opens java.base/java.lang=ALL-UNNAMED
- #349: Added module "blackbird-tests" for classpath-mode Blackbird coverage