diff --git a/src/main/java/com/fasterxml/jackson/databind/PropertyNamingStrategies.java b/src/main/java/com/fasterxml/jackson/databind/PropertyNamingStrategies.java index c0b7664dba..130f364a5f 100644 --- a/src/main/java/com/fasterxml/jackson/databind/PropertyNamingStrategies.java +++ b/src/main/java/com/fasterxml/jackson/databind/PropertyNamingStrategies.java @@ -88,6 +88,59 @@ public abstract class PropertyNamingStrategies */ public static final PropertyNamingStrategy LOWER_DOT_CASE = LowerDotCaseStrategy.INSTANCE; + /** + * Returns a default instance of standard {@link PropertyNamingStrategy} which is statically defined in + * {@link PropertyNamingStrategies}. Otherwise, returns null. + * + * @param type type of {@link PropertyNamingStrategy} + * @return a default instance of standard {@link PropertyNamingStrategy}, or null + */ + public static PropertyNamingStrategy getDefaultInstanceOf(Class type) { + // PropertyNamingStrategy + if (type == PropertyNamingStrategy.SnakeCaseStrategy.class) { + return PropertyNamingStrategies.SNAKE_CASE; + } + if (type == PropertyNamingStrategy.UpperCamelCaseStrategy.class) { + return PropertyNamingStrategies.UPPER_CAMEL_CASE; + } + if (type == PropertyNamingStrategy.KebabCaseStrategy.class) { + return PropertyNamingStrategies.KEBAB_CASE; + } + if (type == PropertyNamingStrategy.LowerDotCaseStrategy.class) { + return PropertyNamingStrategies.LOWER_DOT_CASE; + } + if (type == PropertyNamingStrategy.LowerCaseWithUnderscoresStrategy.class) { + return PropertyNamingStrategies.SNAKE_CASE; + } + if (type == PropertyNamingStrategy.PascalCaseStrategy.class) { + return PropertyNamingStrategies.UPPER_CAMEL_CASE; + } + + // PropertyNamingStrategies + if (type == PropertyNamingStrategies.SnakeCaseStrategy.class) { + return PropertyNamingStrategies.SNAKE_CASE; + } + if (type == PropertyNamingStrategies.UpperSnakeCaseStrategy.class) { + return PropertyNamingStrategies.UPPER_SNAKE_CASE; + } + if (type == PropertyNamingStrategies.LowerCamelCaseStrategy.class) { + return PropertyNamingStrategies.LOWER_CAMEL_CASE; + } + if (type == PropertyNamingStrategies.UpperCamelCaseStrategy.class) { + return PropertyNamingStrategies.UPPER_CAMEL_CASE; + } + if (type == PropertyNamingStrategies.LowerCaseStrategy.class) { + return PropertyNamingStrategies.LOWER_CASE; + } + if (type == PropertyNamingStrategies.KebabCaseStrategy.class) { + return PropertyNamingStrategies.KEBAB_CASE; + } + if (type == PropertyNamingStrategies.LowerDotCaseStrategy.class) { + return PropertyNamingStrategies.LOWER_DOT_CASE; + } + return null; + } + /* /********************************************************************** /* Public base class for simple implementations diff --git a/src/main/java/com/fasterxml/jackson/databind/introspect/POJOPropertiesCollector.java b/src/main/java/com/fasterxml/jackson/databind/introspect/POJOPropertiesCollector.java index 61961db4db..6839f6ccb9 100644 --- a/src/main/java/com/fasterxml/jackson/databind/introspect/POJOPropertiesCollector.java +++ b/src/main/java/com/fasterxml/jackson/databind/introspect/POJOPropertiesCollector.java @@ -1450,6 +1450,13 @@ private PropertyNamingStrategy _findNamingStrategy() return pns; } } + + PropertyNamingStrategy defaultInstance = PropertyNamingStrategies + .getDefaultInstanceOf((Class) namingClass); + if (defaultInstance != null) { + return defaultInstance; + } + return (PropertyNamingStrategy) ClassUtil.createInstance(namingClass, _config.canOverrideAccessModifiers()); } diff --git a/src/test/java/com/fasterxml/jackson/databind/introspect/TestNamingStrategyStd.java b/src/test/java/com/fasterxml/jackson/databind/introspect/TestNamingStrategyStd.java index a0e1a9791b..06bd7b8978 100644 --- a/src/test/java/com/fasterxml/jackson/databind/introspect/TestNamingStrategyStd.java +++ b/src/test/java/com/fasterxml/jackson/databind/introspect/TestNamingStrategyStd.java @@ -627,4 +627,53 @@ public void testNamingStrategiesHandlingNullAndEmpty() { assertEquals(" ", namingStrategy.translate(" ")); } } + + public void testGetDefaultInstance() { + // PropertyNamingStrategy + assertSame( + PropertyNamingStrategies.SNAKE_CASE, + PropertyNamingStrategies.getDefaultInstanceOf(PropertyNamingStrategy.SnakeCaseStrategy.class)); + assertSame( + PropertyNamingStrategies.UPPER_CAMEL_CASE, + PropertyNamingStrategies.getDefaultInstanceOf(PropertyNamingStrategy.UpperCamelCaseStrategy.class)); + assertSame( + PropertyNamingStrategies.KEBAB_CASE, + PropertyNamingStrategies.getDefaultInstanceOf(PropertyNamingStrategy.KebabCaseStrategy.class)); + assertSame( + PropertyNamingStrategies.LOWER_DOT_CASE, + PropertyNamingStrategies.getDefaultInstanceOf(PropertyNamingStrategy.LowerDotCaseStrategy.class)); + assertSame( + PropertyNamingStrategies.SNAKE_CASE, + PropertyNamingStrategies.getDefaultInstanceOf(PropertyNamingStrategy.LowerCaseWithUnderscoresStrategy.class)); + assertSame( + PropertyNamingStrategies.UPPER_CAMEL_CASE, + PropertyNamingStrategies.getDefaultInstanceOf(PropertyNamingStrategy.PascalCaseStrategy.class)); + + // PropertyNamingStrategies + assertSame( + PropertyNamingStrategies.SNAKE_CASE, + PropertyNamingStrategies.getDefaultInstanceOf(PropertyNamingStrategies.SnakeCaseStrategy.class)); + assertSame( + PropertyNamingStrategies.UPPER_SNAKE_CASE, + PropertyNamingStrategies.getDefaultInstanceOf(PropertyNamingStrategies.UpperSnakeCaseStrategy.class)); + assertSame( + PropertyNamingStrategies.LOWER_CAMEL_CASE, + PropertyNamingStrategies.getDefaultInstanceOf(PropertyNamingStrategies.LowerCamelCaseStrategy.class)); + assertSame( + PropertyNamingStrategies.UPPER_CAMEL_CASE, + PropertyNamingStrategies.getDefaultInstanceOf(PropertyNamingStrategies.UpperCamelCaseStrategy.class)); + assertSame( + PropertyNamingStrategies.LOWER_CASE, + PropertyNamingStrategies.getDefaultInstanceOf(PropertyNamingStrategies.LowerCaseStrategy.class)); + assertSame( + PropertyNamingStrategies.KEBAB_CASE, + PropertyNamingStrategies.getDefaultInstanceOf(PropertyNamingStrategies.KebabCaseStrategy.class)); + assertSame( + PropertyNamingStrategies.LOWER_DOT_CASE, + PropertyNamingStrategies.getDefaultInstanceOf(PropertyNamingStrategies.LowerDotCaseStrategy.class)); + + // others + assertNull( + PropertyNamingStrategies.getDefaultInstanceOf(PropertyNamingStrategy.class)); + } }