diff --git a/release-notes/VERSION-2.x b/release-notes/VERSION-2.x index 263ffd3b0a..3165bd1449 100644 --- a/release-notes/VERSION-2.x +++ b/release-notes/VERSION-2.x @@ -93,6 +93,10 @@ Project: jackson-databind #4709: Add `JacksonCollectors` with `toArrayNode()` implementation (contributed by @rikkarth) +2.17.3 (not yet released) + +#4718: Should not fail on trying to serialize `java.time.DateTimeException` + 2.17.2 (05-Jul-2024) #4561: Issues using jackson-databind 2.17.1 with Reactor diff --git a/src/main/java/tools/jackson/databind/cfg/BaseSettings.java b/src/main/java/tools/jackson/databind/cfg/BaseSettings.java index 6299ea4132..22e322c9ce 100644 --- a/src/main/java/tools/jackson/databind/cfg/BaseSettings.java +++ b/src/main/java/tools/jackson/databind/cfg/BaseSettings.java @@ -45,6 +45,11 @@ public final class BaseSettings */ protected final PropertyNamingStrategy _propertyNamingStrategy; + /** + * Custom enum naming strategy in use, if any. + */ + protected final EnumNamingStrategy _enumNamingStrategy; + /** * Provider for creating {@link AccessorNamingStrategy} instances to use */ @@ -136,16 +141,20 @@ public final class BaseSettings /********************************************************************** */ - public BaseSettings(AnnotationIntrospector ai, - PropertyNamingStrategy pns, AccessorNamingStrategy.Provider accNaming, - TypeResolverBuilder defaultTyper, PolymorphicTypeValidator ptv, - DateFormat dateFormat, HandlerInstantiator hi, - Locale locale, TimeZone tz, Base64Variant defaultBase64, - CacheProvider cacheProvider, JsonNodeFactory nodeFactory, - ConstructorDetector ctorDetector) + /** + * @since 2.19 + */ + public BaseSettings(AnnotationIntrospector ai, PropertyNamingStrategy pns, + EnumNamingStrategy ens, AccessorNamingStrategy.Provider accNaming, + TypeResolverBuilder defaultTyper, PolymorphicTypeValidator ptv, + DateFormat dateFormat, HandlerInstantiator hi, + Locale locale, TimeZone tz, Base64Variant defaultBase64, + CacheProvider cacheProvider, JsonNodeFactory nodeFactory, + ConstructorDetector ctorDetector) { _annotationIntrospector = ai; _propertyNamingStrategy = pns; + _enumNamingStrategy = ens; _accessorNaming = accNaming; _defaultTyper = defaultTyper; _typeValidator = ptv; @@ -159,6 +168,22 @@ public BaseSettings(AnnotationIntrospector ai, _ctorDetector = ctorDetector; } + /** + * @deprecated Since 2.19, use variant that takes {@link EnumNamingStrategy} instead. + */ + @Deprecated + public BaseSettings(AnnotationIntrospector ai, + PropertyNamingStrategy pns, AccessorNamingStrategy.Provider accNaming, + TypeResolverBuilder defaultTyper, PolymorphicTypeValidator ptv, + DateFormat dateFormat, HandlerInstantiator hi, + Locale locale, TimeZone tz, Base64Variant defaultBase64, + CacheProvider cacheProvider, JsonNodeFactory nodeFactory, + ConstructorDetector ctorDetector) + { + this(ai, pns, null, accNaming, defaultTyper, ptv, dateFormat, hi, locale, tz, + defaultBase64, cacheProvider, nodeFactory, ctorDetector); + } + /* /********************************************************************** /* Factory methods @@ -169,7 +194,7 @@ public BaseSettings withAnnotationIntrospector(AnnotationIntrospector ai) { if (_annotationIntrospector == ai) { return this; } - return new BaseSettings(ai, _propertyNamingStrategy, _accessorNaming, + return new BaseSettings(ai, _propertyNamingStrategy, _enumNamingStrategy, _accessorNaming, _defaultTyper, _typeValidator, _dateFormat, _handlerInstantiator, _locale, _timeZone, _defaultBase64, _cacheProvider, _nodeFactory, _ctorDetector); } @@ -186,7 +211,19 @@ public BaseSettings with(PropertyNamingStrategy pns) { if (_propertyNamingStrategy == pns) { return this; } - return new BaseSettings(_annotationIntrospector, pns, _accessorNaming, + return new BaseSettings(_annotationIntrospector, pns, _enumNamingStrategy, _accessorNaming, + _defaultTyper, _typeValidator, _dateFormat, _handlerInstantiator, _locale, + _timeZone, _defaultBase64, _cacheProvider, _nodeFactory, _ctorDetector); + } + + /** + * @since 2.19 + */ + public BaseSettings with(EnumNamingStrategy ens) { + if (_propertyNamingStrategy == ens) { + return this; + } + return new BaseSettings(_annotationIntrospector, _propertyNamingStrategy, ens, _accessorNaming, _defaultTyper, _typeValidator, _dateFormat, _handlerInstantiator, _locale, _timeZone, _defaultBase64, _cacheProvider, _nodeFactory, _ctorDetector); } @@ -195,7 +232,7 @@ public BaseSettings with(AccessorNamingStrategy.Provider p) { if (_accessorNaming == p) { return this; } - return new BaseSettings(_annotationIntrospector, _propertyNamingStrategy, p, + return new BaseSettings(_annotationIntrospector, _propertyNamingStrategy, _enumNamingStrategy, p, _defaultTyper, _typeValidator, _dateFormat, _handlerInstantiator, _locale, _timeZone, _defaultBase64, _cacheProvider, _nodeFactory, _ctorDetector); } @@ -204,7 +241,7 @@ public BaseSettings with(TypeResolverBuilder typer) { if (_defaultTyper == typer) { return this; } - return new BaseSettings(_annotationIntrospector, _propertyNamingStrategy, _accessorNaming, + return new BaseSettings(_annotationIntrospector, _propertyNamingStrategy, _enumNamingStrategy, _accessorNaming, typer, _typeValidator, _dateFormat, _handlerInstantiator, _locale, _timeZone, _defaultBase64, _cacheProvider, _nodeFactory, _ctorDetector); } @@ -213,7 +250,7 @@ public BaseSettings with(PolymorphicTypeValidator ptv) { if (_typeValidator == ptv) { return this; } - return new BaseSettings(_annotationIntrospector, _propertyNamingStrategy, _accessorNaming, + return new BaseSettings(_annotationIntrospector, _propertyNamingStrategy, _enumNamingStrategy, _accessorNaming, _defaultTyper, ptv, _dateFormat, _handlerInstantiator, _locale, _timeZone, _defaultBase64, _cacheProvider, _nodeFactory, _ctorDetector); } @@ -227,7 +264,7 @@ public BaseSettings with(DateFormat df) { if ((df != null) && hasExplicitTimeZone()) { df = _force(df, _timeZone); } - return new BaseSettings(_annotationIntrospector, _propertyNamingStrategy, _accessorNaming, + return new BaseSettings(_annotationIntrospector, _propertyNamingStrategy, _enumNamingStrategy, _accessorNaming, _defaultTyper, _typeValidator, df, _handlerInstantiator, _locale, _timeZone, _defaultBase64, _cacheProvider, _nodeFactory, _ctorDetector); } @@ -236,7 +273,7 @@ public BaseSettings with(HandlerInstantiator hi) { if (_handlerInstantiator == hi) { return this; } - return new BaseSettings(_annotationIntrospector, _propertyNamingStrategy, _accessorNaming, + return new BaseSettings(_annotationIntrospector, _propertyNamingStrategy, _enumNamingStrategy, _accessorNaming, _defaultTyper, _typeValidator, _dateFormat, hi, _locale, _timeZone, _defaultBase64, _cacheProvider, _nodeFactory, _ctorDetector); } @@ -245,7 +282,7 @@ public BaseSettings with(Locale l) { if (_locale == l) { return this; } - return new BaseSettings(_annotationIntrospector, _propertyNamingStrategy, _accessorNaming, + return new BaseSettings(_annotationIntrospector, _propertyNamingStrategy, _enumNamingStrategy, _accessorNaming, _defaultTyper, _typeValidator, _dateFormat, _handlerInstantiator, l, _timeZone, _defaultBase64, _cacheProvider, _nodeFactory, _ctorDetector); } @@ -261,7 +298,7 @@ public BaseSettings with(TimeZone tz) return this; } DateFormat df = _force(_dateFormat, (tz == null) ? DEFAULT_TIMEZONE : tz); - return new BaseSettings(_annotationIntrospector, _propertyNamingStrategy, _accessorNaming, + return new BaseSettings(_annotationIntrospector, _propertyNamingStrategy, _enumNamingStrategy, _accessorNaming, _defaultTyper, _typeValidator, df, _handlerInstantiator, _locale, tz, _defaultBase64, _cacheProvider, _nodeFactory, _ctorDetector); } @@ -270,7 +307,7 @@ public BaseSettings with(Base64Variant base64) { if (base64 == _defaultBase64) { return this; } - return new BaseSettings(_annotationIntrospector, _propertyNamingStrategy, _accessorNaming, + return new BaseSettings(_annotationIntrospector, _propertyNamingStrategy, _enumNamingStrategy, _accessorNaming, _defaultTyper, _typeValidator, _dateFormat, _handlerInstantiator, _locale, _timeZone, base64, _cacheProvider, _nodeFactory, _ctorDetector); } @@ -284,7 +321,7 @@ public BaseSettings with(CacheProvider cacheProvider) { if (cacheProvider == _cacheProvider) { return this; } - return new BaseSettings(_annotationIntrospector, _propertyNamingStrategy, _accessorNaming, + return new BaseSettings(_annotationIntrospector, _propertyNamingStrategy, _enumNamingStrategy, _accessorNaming, _defaultTyper, _typeValidator, _dateFormat, _handlerInstantiator, _locale, _timeZone, _defaultBase64, cacheProvider, _nodeFactory, _ctorDetector); } @@ -293,7 +330,7 @@ public BaseSettings with(JsonNodeFactory nodeFactory) { if (nodeFactory == _nodeFactory) { return this; } - return new BaseSettings(_annotationIntrospector, _propertyNamingStrategy, _accessorNaming, + return new BaseSettings(_annotationIntrospector, _propertyNamingStrategy, _enumNamingStrategy, _accessorNaming, _defaultTyper, _typeValidator, _dateFormat, _handlerInstantiator, _locale, _timeZone, _defaultBase64, _cacheProvider, nodeFactory, _ctorDetector); } @@ -302,7 +339,7 @@ public BaseSettings with(ConstructorDetector ctorDetector) { if (ctorDetector == _ctorDetector) { return this; } - return new BaseSettings(_annotationIntrospector, _propertyNamingStrategy, _accessorNaming, + return new BaseSettings(_annotationIntrospector, _propertyNamingStrategy, _enumNamingStrategy, _accessorNaming, _defaultTyper, _typeValidator, _dateFormat, _handlerInstantiator, _locale, _timeZone, _defaultBase64, _cacheProvider, _nodeFactory, ctorDetector); } @@ -321,6 +358,10 @@ public PropertyNamingStrategy getPropertyNamingStrategy() { return _propertyNamingStrategy; } + public EnumNamingStrategy getEnumNamingStrategy() { + return _enumNamingStrategy; + } + public AccessorNamingStrategy.Provider getAccessorNaming() { return _accessorNaming; } diff --git a/src/main/java/tools/jackson/databind/cfg/MapperBuilder.java b/src/main/java/tools/jackson/databind/cfg/MapperBuilder.java index 47ea4fc855..8ddea1fb2b 100644 --- a/src/main/java/tools/jackson/databind/cfg/MapperBuilder.java +++ b/src/main/java/tools/jackson/databind/cfg/MapperBuilder.java @@ -53,7 +53,7 @@ public abstract class MapperBuilder