Skip to content

Jackson Release 2.11

Tatu Saloranta edited this page Apr 24, 2020 · 79 revisions

Version 2.11 is being developed, as of April 2020.

Status

Under development

Patches

Changes, JDK requirements

No changes to minimum JDK baselines for use since 2.10

JDK 8 is required to build all components, however, as module info inclusion plug-in requires it (note: publishing to Maven Central also requires JDK 8), but runtime environment of JDK/JVM jacis needed with exception of:

  • jackson-annotations, jackson-core, jackson-jr only require JDK/JVM 6
  • Kotlin, Scala and Java 8 modules require JDK/JVM 8 or higher

Changes, behavior

  • Default serialization ordering now considers @JsonProperty(index = ) (see databind#2555 below)
  • Avro format backend now identifies as capable of embedding binary data: will change schema type indicated for byte[], java.util.UUID (see dataformats-binary/avro#179 below)
  • Timezone offset in default java.util.Date, java.util.Calendar serialization will now include colon (like +00:00) by default (see databind#2643 below)

New Modules, status changes

Planned features (work-in-progress) for 2.11

Major features of 2.11

Improve handling of java.util.UUID, binary types

Need to properly serialize/deserialize UUIDs in Avro was determined late, but will also affect Protobuf. Beyond more compact binary representation, generating usable schema, it would be nice to also allow Shape overrides in case textual representation is needed.

More support for safe Polymorphic deserialization

New MapperFeature, BLOCK_UNSAFE_POLYMORPHIC_BASE_TYPES added (see #2587): if enabled, will impose limits on allowed base types for:

  1. Legacy Default Typing enabling methods (ObjectMapper.enableDefaultTyping()), which, while deprecated may still be in use
  2. Polymorphic deserialization using @JsonTypeInfo with class name as is, without explicitly configured PolymorphicTypeValidator

This is basically a one-line addition that can force safe defaults, similar to ones that Jackson 3.0 will have by default: overridable as needed, but strict(er) by default.

Jackson-jr support for (some of) core Jackson annotations

With new jr-annotation-support component (JacksonAnnotationExtension), it is now possible use some of core Jackson annotations for changing basic property inclusion/ignoral and naming rules. See jackson-jr#32 below for details.

Significant other features of 2.11

Databind:

  • @JsonAlias works for Enums (2352)
  • @JsonSerialize(keyUsing) and @JsonDeserialize(keyUsing) work on (Map) key class (#2503)

Full Change list

Changes, core

  • #504: Add a String Array write method in the Streaming API
  • #565: Synchronize variants of JsonGenerator#writeNumberField with JsonGenerator#writeNumber
  • #587: Add JsonGenerator#writeNumber(char[], int, int) method
  • #606: Do not clear aggregated contents of TextBuffer when releaseBuffers() called
  • #609: FilteringGeneratorDelegate does not handle writeString(Reader, int)
  • #611: Optionally allow leading decimal in float tokens
  • #953: i-I case conversion problem in Turkish locale with case-insensitive deserialization
  • #962: @JsonInject fails on trying to find deserializer even if inject-only
  • #1983: Polymorphic deserialization should handle case-insensitive Type Id property name if MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES is enabled
  • #2049: TreeTraversingParser and UTF8StreamJsonParser create contexts differently
  • #2352: Support use of @JsonAlias for enum values
  • #2365: declaringClass of "enum-as-POJO" not removed for ObjectMapper with a naming strategy
  • #2480: Fix JavaType.isEnumType() to support sub-classes
  • #2487: BeanDeserializerBuilder Protected Factory Method for Extension
  • #2503: Support @JsonSerialize(keyUsing) and @JsonDeserialize(keyUsing) on Key class
  • #2511: Add SerializationFeature.WRITE_SELF_REFERENCES_AS_NULL
  • #2515: ObjectMapper.registerSubtypes(NamedType...) doesn't allow to register the same POJO for two different type ids
  • #2522: DeserializationContext.handleMissingInstantiator() throws MismatchedInputException for non-static inner classes
  • #2525: Incorrect JsonStreamContext for TokenBuffer and TreeTraversingParser
  • #2527: Add AnnotationIntrospector.findRenameByField() to support Kotlin's "is-getter" naming convention
  • #2555: Use @JsonProperty(index) for sorting properties on serialization
  • #2565: Java 8 Optional not working with @JsonUnwrapped on unwrappable type
  • #2587: Add MapperFeature.BLOCK_UNSAFE_POLYMORPHIC_BASE_TYPES to allow blocking use of unsafe base type for polymorphic deserialization
  • #2589: DOMDeserializer: setExpandEntityReferences(false) may not prevent external entity expansion in all cases
  • #2592: ObjectMapper.setSerializationInclusion() is ignored for JsonAnyGetter
  • #2608: ValueInstantiationException when deserializing using a builder and UNWRAP_SINGLE_VALUE_ARRAYS
  • #2636: ObjectReader readValue lacks Class argument
  • #2643: Change default textual serialization of java.util.Date/Calendar to include colon in timezone offset
  • #2647: Add ObjectMapper.createParser() and createGenerator() methods
  • #2657: Allow serialization of Properties with non-String values
  • #2663: Add new factory method for creating custom EnumValues to pass to `EnumDeserializer
  • #2693: Add convenience methods for creating List, Map valued ObjectReaders (ObjectMapper.readerForListOf())

Changes, data formats

  • #179: Add AvroGenerator.canWriteBinaryNatively() to support binary writes, fix java.util.UUID representation
  • #7: Add CsvParser.Feature.EMPTY_STRING_AS_NULL to allow coercing empty Strings into null values
  • #115: JsonProperty index is not honored by CsvSchema builder (actually fixed by databind#2555)
  • #192: Allow IonObjectMapper with class name annotation introspector to deserialize generic subtypes
  • #180: YAMLGenerator serializes string with special chars unquoted when using MINIMIZE_QUOTES mode

Changes, datatypes

  • #138: Prevent deserialization of "" as null for Duration, Instant, LocalTime, OffsetTime and YearMonth in "strict" (non-lenient) mode
  • #13: Support for JsonPatch and JsonMergePatch defined in JSON-P 1.1

Changes, JVM Languages

  • #284: Use AnnotationIntrospector.findRenameByField() to support "is properties"
  • #321: MissingKotlinParameterException should extend MismatchedInputException
  • #87: Support for default parameter values

Changes, other

  • #32: Add support for subset of jackson annotations
  • #70: Add extension point (ReaderWriterModifier) to allow more customization of POJO readers, writers
Clone this wiki locally