-
-
Notifications
You must be signed in to change notification settings - Fork 1.2k
Jackson Release 2.11
Version 2.11 of Jackson was released on April 26, 2020.
This wiki page gives a list of links to all changes (with brief descriptions); there is also Jackson 2.11 features blog post that covers some of the highlights.
Branch is still open for new minor versions as of March 2020, but it is likely that 2.11.4 will be the last full patch set released.
Beyond initial 2.11.0 (described here), following patch releases have been made:
None released yet.
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 7 is 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
- Default serialization ordering now considers
@JsonProperty(index = )
(seedatabind#2555
below) -
Avro
format backend now identifies as capable of embedding binary data: will change schema type indicated forbyte[]
,java.util.UUID
(seedataformats-binary/avro#179
below) - Timezone offset in default
java.util.Date
,java.util.Calendar
serialization will now include colon (like+00:00
) by default (seedatabind#2643
below)
- New datatype module --
jackson-datatype-joda-money
for Joda Money datatypes- Added as part of multi-project Jackson Misc Datatypes (https://github.com/FasterXML/jackson-datatypes-misc) repo
- Contributed by Iurii Ignatko
-
jackson-jr
now has one more component,jr-annotation-support
(see issuejackson-jr#32
below)
Need to properly serialize/deserialize UUID
s 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.
New MapperFeature
, BLOCK_UNSAFE_POLYMORPHIC_BASE_TYPES
added (see #2587): if enabled, will impose limits on allowed base types for:
- Legacy Default Typing enabling methods (
ObjectMapper.enableDefaultTyping()
), which, while deprecated may still be in use - Polymorphic deserialization using
@JsonTypeInfo
with class name as is, without explicitly configuredPolymorphicTypeValidator
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.
ObjectMapper mapper = JsonMapper.builder()
.enable(MapperFeature.BLOCK_UNSAFE_POLYMORPHIC_BASE_TYPES)
.build();
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; basic usage is by registering extension like so:
JSON j = JSON.builder().register(JacksonAnnotationExtension.std).build();
MyValue v = j.beanFrom(source, MyValue.class);
Databind:
-
@JsonAlias
works for Enums (2352) -
@JsonSerialize(keyUsing)
and@JsonDeserialize(keyUsing)
work on (Map) key class (#2503)
No changes since 2.10.
- #504: Add a String Array write method in the Streaming API
-
#565: Synchronize variants of
JsonGenerator#writeNumberField
withJsonGenerator#writeNumber
- #587: Add JsonGenerator#writeNumber(char[], int, int) method
-
#606: Do not clear aggregated contents of
TextBuffer
whenreleaseBuffers()
called -
#609:
FilteringGeneratorDelegate
does not handlewriteString(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
andUTF8StreamJsonParser
create contexts differently -
#2352: Support use of
@JsonAlias
for enum values -
#2365:
declaringClass
of "enum-as-POJO" not removed forObjectMapper
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()
throwsMismatchedInputException
for non-static inner classes -
#2525: Incorrect
JsonStreamContext
forTokenBuffer
andTreeTraversingParser
-
#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 [CVE-2020-25649] -
#2592:
ObjectMapper.setSerializationInclusion()
is ignored forJsonAnyGetter
-
#2608:
ValueInstantiationException
when deserializing using a builder andUNWRAP_SINGLE_VALUE_ARRAYS
- #2627: JsonIgnoreProperties(ignoreUnknown = true) does not work on field and method level
- #2632: Failure to resolve generic type parameters on serialization
- #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()
andcreateGenerator()
methods -
#2657: Allow serialization of
Properties
with non-String values -
#2663: Add new factory method for creating custom
EnumValues
to pass to `EnumDeserializer -
#2668:
IllegalArgumentException
thrown for mismatched subclass deserialization -
#2693: Add convenience methods for creating
List
,Map
valuedObjectReader
s (ObjectMapper.readerForListOf())
-
#179: Add
AvroGenerator.canWriteBinaryNatively()
to support binary writes, fixjava.util.UUID
representation - #195: Remove dependencies upon Jackson 1.X and Avro's JacksonUtils
-
#201:
CBORGenerator.Feature.WRITE_MINIMAL_INTS
does not write most compact form for all integers
-
#7: Add
CsvParser.Feature.EMPTY_STRING_AS_NULL
to allow coercing empty Strings intonull
values -
#115: JsonProperty index is not honored by CsvSchema builder
(actually fixed by
databind#2555
) -
#174:
CsvParser.Feature.SKIP_EMPTY_LINES
results in a mapping error -
#191:
ArrayIndexOutOfBoundsException
when skipping empty lines, comments - #195: Add schema creating csv schema with View
-
#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
-
#58: Should not parse
LocalDate
s from number (timestamp), or at least should have an option preventing -
#128: Timestamp keys from
ZonedDateTime
-
#138: Prevent deserialization of "" as
null
forDuration
,Instant
,LocalTime
,OffsetTime
andYearMonth
in "strict" (non-lenient) mode -
#148: Allow strict
LocalDate
parsing - Add explicit
ZoneId
serializer to force use ofZoneId
as Type Id, and not inaccessible subtype (ZoneRegion
): this to avoid JDK9+ Module Access problem
- #104: Deserializing Interval discards timezone information
-
#13: Support for
JsonPatch
andJsonMergePatch
defined in JSON-P 1.1
-
#281: Hide singleton deserialization support behind a setting on the module,
singletonSupport
and enumSingletonSupport
. Defaults to pre-2.10 behavior. -
#284: Use
AnnotationIntrospector.findRenameByField()
to support "is properties" -
#321:
MissingKotlinParameterException
should extendMismatchedInputException
- Add Builder for KotlinModule
- #87: Support for default parameter values