Skip to content

Jackson Release 2.6

Tatu Saloranta edited this page Oct 21, 2015 · 40 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:

Changes: compatibility

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

Changes, core

  • #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
  • #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
  • #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

  • #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

The very first official release!

  • #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

  • #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
  • #67: Provide support for Hibernate 5.x (hibernate5 maven sub-module; Hibernate5Module Jackson module)
  • 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
  • #8: JDK8 module should respect JsonInclude.Include.NON_ABSENT
  • #11: Add configureAbsentsAsNulls config setting, for better compatibility with Guava module
  • #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

  • #46: Log-warning "Disabling Afterburner deserialization for type" using wrong logger-name
  • #53: Include checksum in generated class names (to resolve #52)
  • #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.
  • #21: Change default package used for materialized classes to reflect Jackson 2.x

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