Jackson Release 2.6

Tatu Saloranta edited this page Jul 11, 2017 · 37 revisions

Version 2.6.0 was released July 17th, 2015. It is a "minor" release following 2.5, meaning that it adds new functionality but be backwards compatible with earlier 2.x releases.

New Modules

This version introduced 2 new FasterXML-maintained standard modules:

  • Protobuf data format module for handling Protocol Buffers encoded data
  • OSGi module for injecting helper objects (via @JacksonInject) using OSGi registry

Patches

Beyond initial 2.6.0 (described here), following patch releases have been made or are planned:

At this point, branch is officially closed, and only micro-patch releases (like 2.6.7.1) are possible:

Changes: compatibility

No changes to JDK requirements or baseline requirements/supports for external platforms (like Android or Scala versions)

Changes, core

Annotations

  • #43: Add @JsonFormat(with=Feature.xxx) to support things like DeserializationFeature.WRITE_SINGLE_ELEM_ARRAYS_UNWRAPPED on per-property basis.
  • #58: Add new properties for @JsonIgnoreProperties, "allowGetters", "allowSetters"
  • #60: Add new value type, OptBoolean, for "optional booleans", to support proper handling and usage of default values, not just explicit true/false.
  • #61: Add new property, @JsonProperty.access (and matching enum) to support read-only/write-only properties
  • #64: Add @Documented for @JsonPropertyDescription

Streaming

  • #137: Allow filtering content read via JsonParser by specifying JsonPointer; uses new class com.fasterxml.jackson.core.filter.FilteringParserDelegate (and related, TokenFilter)
  • #177: Add a check so JsonGenerator.writeString() won't work if writeFieldName() expected.
  • #182: Inconsistent TextBuffer.getTextBuffer() behavior
  • #185: Allow filtering content written via JsonGenerator by specifying JsonPointer; uses new class com.fasterxml.jackson.core.filter.FilteringGeneratorDelegate (and related, TokenFilter)
  • #188: JsonParser.getValueAsString() should return field name for JsonToken.FIELD_NAME, not null
  • #189: Add JsonFactory.Feature.USE_THREAD_LOCAL_FOR_BUFFER_RECYCLING (default: true), which may be disabled to prevent use of ThreadLocal-based buffer recyling.
  • #195: Add JsonGenerator.getOutputBuffered() to find out amount of content buffered, not yet flushed.
  • #196: Add support for FormatFeature extension, for format-specifc Enum-backed parser/generator options
  • Other:
    • Minor improvement to construction of "default PrettyPrinter": now overridable by data format modules
    • Implement a new yet more optimized symbol table for byte-backed parsers
    • Add JsonParser.Feature.IGNORE_UNDEFINED, useful for data formats like protobuf

Databind

  • #77: Allow injection of 'transient' fields
  • #95: Allow read-only properties with @JsonIgnoreProperties(allowGetters=true)
  • #296: Serialization of transient fields with public getters (add MapperFeature.PROPAGATE_TRANSIENT_MARKER)
  • #312: Support Type Id mappings where two ids map to same Class
  • #348: ObjectMapper.valueToTree() does not work with @JsonRawValue
  • #504: Add DeserializationFeature.USE_LONG_FOR_INTS
  • #624: Allow setting external ClassLoader to use, via TypeFactory
  • #649: Make BeanDeserializer use new parser.nextFieldName() and .hasTokenId() methods
  • #664: Add DeserializationFeature.ACCEPT_FLOAT_AS_INT to prevent coercion of floating point numbers int int/long/Integer/Long
  • #677: Specifying Enum value serialization using @JsonProperty
  • #688: Provide a means for an ObjectMapper to discover mixin annotation classes on demand
  • #689: Add ObjectMapper.setDefaultPrettyPrinter(PrettyPrinter)
  • #696: Copy constructor does not preserve _injectableValues
  • #698: Add support for referential types (ReferenceType)
  • #700: Cannot Change Default Abstract Type Mapper from LinkedHashMap
  • #725: Auto-detect multi-argument constructor with implicit names if it is the only visible creator
  • #727: Improve ObjectWriter.forType() to avoid forcing base type for container types
  • #734: Add basic error-recovery for ObjectReader.readValues()
  • #737: Add support for writing raw values in TokenBuffer
  • #740: Ensure proper null (as empty) handling for AtomicReference
  • #743: Add RawValue helper type, for piping raw values through TokenBuffer
  • #756: Disabling SerializationFeature.FAIL_ON_EMPTY_BEANS does not affect canSerialize()
  • #762: Add ObjectWriter.withoutRootName(), ObjectReader.withoutRootName()
  • #777: Allow missing build method if its name is empty ("")
  • #781: Support handling of @JsonProperty.required for Creator methods
  • #787: Add ObjectMapper setFilterProvider(FilterProvider) to allow chaining
  • #790: Add JsonNode.equals(Comparator<JsonNode>, JsonNode) to support configurable/external equality comparison
  • #794: Add SerializationFeature.WRITE_DATES_WITH_ZONE_ID to allow inclusion/exclusion of timezone id for date/time values (as opposed to timezone offset)
  • #795: Converter annotation not honored for abstract types
  • #810: Force value coercion for java.util.Properties, so that values are Strings
  • #811: Add new option, JsonInclude.Include.NON_ABSENT (to support exclusion of JDK8/Guava Optionals)
  • #813: Add support for new property of @JsonProperty.access to support read-only/write-only use cases
  • #820: Add new method for ObjectReader, to bind from JSON Pointer position
  • #824: Contextual TimeZone changes don't take effect wrt java.util.Date, java.util.Calendar serialization
  • #827: Fix for polymorphic custom map key serializer
  • #840: Change semantics of @JsonPropertyOrder(alphabetic) to only count true value
  • #848: Custom serializer not used if POJO has @JsonValue
  • #849: Possible problem with NON_EMPTY exclusion, ints, Strings
  • #868: Annotations are lost in the case of duplicate methods

Changes, Data formats

CSV

  • #72: Recognize the configured "null value" (String) also in reader-infrastructure.
  • #74: Problems with ordering, @JsonPropertyOrder losing alphabetic ordering
  • #83: Serializing List with null values leads to corrupt CSV

Protobuf

The very first official release!

YAML

  • #35: Add YAMLGenerator.Feature.SPLIT_LINES to allow controlling whether SnakeYAML splits longer text blocks with line breaks or not
    • Also: upgrade to SnakeYAML 1.15

Changes, Data types

Guava

  • #64: @JsonUnwrapped annotation is ignored when a field is an Optional
  • #66: Add GuavaModule.configureAbsentsAsNulls(boolean) to change whether Optional.absent() is to be handled same as Java null during serialization (default: true) or not.
  • #67: Support deserializing ImmutableSetMultimaps
  • #68: Add support for JsonInclude.Include.NON_ABSENT, to compensate for #66
  • #70: Change OSGi manifest entries to import guava 15.0 or greater
  • #74: Multimap serializer ignores _valueTypeSerializer

Hibernate

  • #67: Provide support for Hibernate 5.x (hibernate5 maven sub-module; Hibernate5Module Jackson module)

HPPC

  • Update hppc dependency to 0.7.1
    • NOTE! Due to HPPC API incompatibilities, this means that module can NOT be used with HPPC versions earlier than 0.7.0.
  • Minimum JDK version now 1.7, as per minimum by HPPC

JDK8

  • #8: JDK8 module should respect JsonInclude.Include.NON_ABSENT
  • #11: Add configureAbsentsAsNulls config setting, for better compatibility with Guava module

Joda

  • #49: testDateMidnightSerWithTypeInfo test dependent on $TZ
  • #58: Support timezone configuration for Interval deserializer
  • #62: Allow use of numbers-as-Strings for LocalDate (in array)
  • #64: Support @JsonFormat(pattern=...) for deserialization
  • #66: Support SerializationFeature.WRITE_DATES_WITH_ZONE_ID
  • #68: TimeZone in DeserializationContext is ignored with SerializationFeature.WRITE_DATES_WITH_ZONE_ID

JSR-310 (aka Java8 Dates)

  • #18: Support serializing and deserializing Maps with jsr310 types as keys
  • #26: ISO strings with time-component cause exception when deserializing to LocalDate
  • #29: Add support for @JsonFormat for Instant
  • #30: Make ZonedDateTime serializer support SerializationFeature.WRITE_DATES_WITH_ZONE_ID

Changes, Jackson jr

  • #24: String/byte[] composers can not write POJOs (ObjectCodec not linked)
  • Other
    • Minor performance optimizations (+10-20% throughput), using new jackson-core 2.6 methods for reading, writing

Changes, JAX-RS

  • #39: Build alternate jars with qualifier "no-metainf-services", which do NOT include META-INF/services metadata for auto-registration

Changes, other modules

Afterburner

  • #46: Log-warning "Disabling Afterburner deserialization for type" using wrong logger-name
  • #53: Include checksum in generated class names (to resolve #52)

JSON Schema

  • #53: Add support to oneOf
  • #57: Enum types should generate a schema that includes the possible enum values
  • #60: Add readonly property to JsonSchema
  • #67: Unable to deserialize (extended/custom) Schema
  • #69: Add support for @Pattern annotations in String schemas
  • Added JsonSchemaGenerator(ObjectWriter) to allow use of (re-)configured ObjectWriter instead of ObjectMapper which can not be configured.

Mr Bean

  • #21: Change default package used for materialized classes to reflect Jackson 2.x

OSGi

The very first official release!

Parameter Names (Java 8 parameter names)

  • #21: Unable to associate parameter name with single non-annotated constructor argument
Clone this wiki locally
You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
Press h to open a hovercard with more details.