-
-
Notifications
You must be signed in to change notification settings - Fork 1.2k
Jackson Release 3.0
Tatu Saloranta edited this page Jan 7, 2025
·
200 revisions
Version 3.0 is under development, as of March 2021 (and since late 2017).
It is a major version update and thereby not API compatible with 2.x; however, since 2.10 new methods have been added in 2.x line to reduce incompatibilities.
Overall plans are outlined in JSTEP-1
Java 17 is now required for all components, except for jackson-annotations that still requires just Java 8
- Removal of all deprecated methods, functionality, as of 2.x
- Remove format-auto-detection (interesting idea but not widely used and few formats beyond JSON, XML, Smile, Avro support detection)
- Full immutability of core entities, via Builder-style construction
-
TokenStreamFactory(oldJsonFactory) -
ObjectMapper(addition of format-specific sub-classes, fromJsonMappertoXmlMapper) - Note Jackson 2.10 and later will also support most of Builder-style construction but without strict guarantees of immutability of underlying entities (due to backwards-compatibility reasons)
- See Jackson 3 immutability with builders
-
- Tighter integration between Streaming and Databinding to allow improved support of non-JSON formats
-
ObjectMapperremains shared API, but every format will have its own mapper subtype, includingJsonMapperfor JSON- Partly implemented in 2.x since 2.10, to support Builder-style construction (albeit without immutability)
- Format-specific mapper will (have to) use format-specific
TokenStreamFactory
-
- Unchecked exceptions (see JSTEP-4
- Base 2.x exceptions will be replaced with new counterparts as follows (counterparts will be added in 2.x but mostly used in 3.0)
-
JsonProcessingException(root exception) becomesJacksonException -
JsonParseException/JsonGenerationException(streaming) will becomeStreamReadException/StreamWriteException -
JsonMappingException(root for databind exceptions) becomesDatabindException - While new exceptions will be added by Jackson 2.13, their use is limited: they CAN be caught but NOT thrown (sort of "read-only" upgrade) while retaining compatibility across minor versions
-
#267: Raise minimum Java version for
jackson-annotationsto Java 8 for Jackson 3.x
-
#378: Change default for
TokenStreamFactory.Feature.INTERN_FIELD_NAMEStofalse - #402: Remove dataformat-auto-detection functionality
-
#411: Rename
JsonStreamContextasTokenStreamContext -
#413: Remove
ObjectCodec: replace withObjectWriteContext/ObjectReadContext -
#432: Add new
TreeNodesubtypes:ArrayTreeNode,ObjectTreeNode - #433: Add Builder pattern for creating configured Stream factories
-
#456: Add
JsonParser.readAsValue(ResolvedType) - #492: Ensure primitive type names in error message enclosed in backticks
-
#551: Remove
JsonGenerator.setPrettyPrinter()from 3.0 -
#663: Rename
JsonEOFExceptionasUnexpectedEndOfInputException -
#670: Replace references to "field" in
JsonGenerator,JsonParsermethod names with "property" -
#671: Replace
getCurrentLocation()/getTokenLocation()withcurrentLocation()/currentTokenLocation() -
#676: Remove
JsonGenerator.canWriteBinaryNatively(),canWriteFormattedNumbers()(replaced byStreamWriteCapabilityequivalents) -
#680: Allow use of
java.nio.file.Pathas parser source, generator target - #689: Remove existing "request payload" functionality
-
#785: Make
JsonGenerator.writeXxx()methods chainable - #793: Rename "com.fasterxml.jackson" -> "tools.jackson"
-
#1090: Remove
BufferRecyclers.SYSTEM_PROPERTY_TRACK_REUSABLE_BUFFERS -
#1125: Remove
TokenStreamFactory.Feature.USE_THREAD_LOCAL_FOR_BUFFER_RECYCLING -
#1200: Change
JsonWriteFeature.ESCAPE_FORWARD_SLASHESdefault totruefor 3.0 - #1231: Enable Fast Floating-Point reading/writing by default in 3.0
-
#1233: Lower default
maxNestingDepthofStreamReadConstraints/StreamWriteConstraintsto 500 in 3.0 -
#1269: Change
JsonFactory.builder()configuration ofRecyclerPoolto avoid allocation default implementation (in 3.0) -
#1364: rename
JsonLocationasTokenStreamLocation[JSTEP-6] -
#1373: Change
TreeNode.propertyName()return type fromIterator<JsonNode>toCollection<JsonNode>(3.0) -
#1378: Rename
JsonParser.getText()as.getString()[JSTEP-6] - Rename
JsonGenerator.Feature.AUTO_CLOSE_JSON_CONTENTasAUTO_CLOSE_CONTENT - Add
TreeCodec.nullNode(),TreeNode.isNull()methods - Change the way
JsonLocation.NAis included in exception messages
-
#1772: Remove
MapperFeature. USE_STD_BEAN_NAMING -
#1773: Remove
MapperFeature.AUTO_DETECT_xxxfeatures -
#1917: Remove
canSerializeandcanDeserializemethods fromObjectMapper -
#1973: Remove support for "default [Map] key serializer" configuration from
SerializerProvider -
#2040: Remove
JsonSerializer.isEmpty() -
#4160: Deprecate
DefaultTyping.EVERYTHINGin2.xand remove in3.0 - Remove
MappingJsonFactory -
#4659: Remove use of global static
TypeFactorysingleton from 3.0 -
#4875: Remove
JsonNode.fields()from 3.0
-
#493: Change
DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIESdefault tofalse - #1600: Serializing locale with underscore, not standard hyphen
-
#1762:
StdDateFormat: serialize time offset using colon -
#1774: Merge Java8 datatype (
Optional,Stream) support in core databind -
#1775: Merge Java8 parameter name support (
jackson-module-parameter-names) in core databind -
#1781: Return
ObjectNodefromObjectNodeset-methods in order to allow better chaining -
#1829:
JsonNode.deepCopy()ClassCastException`s -
#1888: Merge
ResolvableSerializerintoJsonSerializer,ResolvableDeserializerintoJsonDeserializer -
#1889: Merge
ContextualSerializerintoJsonSerializer,ContextualDeserializerintoJsonDeserializer -
#1916: Change
MapperFeature.USE_GETTERS_AS_SETTERS)default tofalse -
#1994: Limit size of
SerializerCache, auto-flush on exceeding -
#1995: Limit size of
DeserializerCache, auto-flush on exceeding -
#2177: Change parent type of
JsonProcessingExceptionto beRuntimeException - #2593: StackTraceElement w/ >= Java 9 doesn't deserialize properly
-
#2713: Change wording of
UnrecognizedPropertyExceptionto refer to "property" not "field" -
#3028: Change
UUIDSerializerto useStreamWriteCapabilitycheck instead ofJsonGenerator.canWriteBinaryNatively() -
#3070: Disable
SerializationFeature.FAIL_ON_EMPTY_BEANSby default -
#4381: Prevent construction of
null-valuedJsonNodes (likeTextNode) -
#4566: Enable
DeserializationFeature.READ_ENUMS_USING_TO_STRINGby default -
#4567: Enable
SerializationFeature.WRITE_ENUMS_USING_TO_STRINGby default -
#4572: Change
MapperFeature.SORT_PROPERTIES_ALPHABETICALLYdefault to true (3.x) -
#4589: Remove
MapperFeature.SORT_CREATOR_PROPERTIES_BY_DECLARATION_ORDERfrom 3.0; make logic default -
#4664: Change
EnumNamingStrategy.convertEnumToExternalName()to takeMapperConfigargument -
#4835: Remove dynamic work-arounds wrt accessing
Recorddefinition -
#4858: Change default of
DeserializationFeature.FAIL_ON_NULL_FOR_PRIMITIVEStotruefor 3.0
-
#3037: Rename
ModuleasJacksonModulein 3.0 (to avoid overlap withjava.lang.Module) -
#3043: Rename
SerializerProviderasSerializationContext -
#3044: Rename
JsonDeserializer/JsonSerializerasValueDeserializer/ValueSerializer -
#3046: Rename
JsonSerializableasJacksonSerializable -
#3047: Rename
Bean[De]SerializerModifierasValue[De]SerializerModifier -
#4818: Rename
AnnotationIntrospector.findDefaultCreator()asfindPreferredCreator()
-
#1789: Add
createGeneratormethods inObjectMapper,ObjectWriter -
#1790: Add
createParsermethods inObjectMapper,ObjectReader -
#1883: Add "abstract type mapping" for deserialization from
Map<ENUMTYPE,V>intoEnumMap(andSet<ENUMTYPE>toEnumSet<EnumType>) -
#1954: Add Builder pattern for creating configured
ObjectMapperinstances -
#1955: Change the way
Modules configure, interact withObjectMapper -
#2013: Allow use of
java.nio.file.PathforreadValue(),writeValue() -
#2382: Support
AutoCloseablewithSerializationFeature.CLOSE_CLOSEABLE -
#2411:
valueToTree()during serialization (viaSerializerProvider()) -
#2828: Add
DatabindExceptionas intermediate subtype ofJsonMappingException -
#3522: Support serializing
ByteArrayOutputStreamas "simple" Binary value -
#3536: Create new exception type
JsonNodeExceptionfor use byJsonNode-related problems
-
#522: JSTEP-8: rename
AvroParser.FeatureasAvroReadFeature,AvroGenerator.FeatureasAvroWriteFeature
-
#524: JSTEP-8: rename
CBORGenerator.FeatureasCBORWriteFeature
-
#510: JSTEP-8: rename
CsvParser.FeatureasCsvReadFeature,CsvGenerator.FeatureasCsvWriteFeature
-
#526: JSTEP-8: rename
IonParser.FeatureasIonReadFeature,IonGenerator.FeatureasIonWriteFeature
-
#528: JSTEP-8: rename
SmileParser.FeatureasSmileReadFeature,SmileGenerator.FeatureasSmileWriteFeature
-
#687: JSTEP-8: rename
FromXmlParser.FeatureasXmlReadFeature,ToXmlGenerator.FeatureasXmlWriteFeature
-
#512: JSTEP-8: rename
YAMLParser.FeatureasYAMLReadFeature,YAMLGenerator.FeatureasYAMLWriteFeature
-
#24: Support for Guava's
Immutable{Double,Int,Long}Array - #69: Add support for Guava primitives during deserialization
-
#123: Change
jackson-module-jaxb-annotationsdependency tooptionalinpom.xmls
- Change
jackson-module-jakarta-xmlbind-annotationsdependency tooptionalinpom.xmls