From 9aad873bd28e2e93fa79696a04ba674070610cf7 Mon Sep 17 00:00:00 2001 From: Tatu Saloranta Date: Mon, 4 Feb 2019 11:15:53 -0800 Subject: [PATCH] Start work merging #2241 --- .../databind/PropertyNamingStrategy.java | 30 +++++++++++++++- .../jackson/databind/BaseMapTest.java | 13 ++++--- .../introspect/TestNamingStrategyStd.java | 36 +++++++++++++++++++ 3 files changed, 71 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/fasterxml/jackson/databind/PropertyNamingStrategy.java b/src/main/java/com/fasterxml/jackson/databind/PropertyNamingStrategy.java index e3024264a8..0c03e02cac 100644 --- a/src/main/java/com/fasterxml/jackson/databind/PropertyNamingStrategy.java +++ b/src/main/java/com/fasterxml/jackson/databind/PropertyNamingStrategy.java @@ -76,6 +76,15 @@ public class PropertyNamingStrategy // NOTE: was abstract until 2.7 */ public static final PropertyNamingStrategy KEBAB_CASE = new KebabCaseStrategy(); + /** + * Naming convention widely used as configuration properties name, where words are in + * lower-case letters, separated by dots. + * See {@link LowerDotCaseStrategy} for details. + * + * @since 2.10 + */ + public static final PropertyNamingStrategy LOWER_DOT_CASE = new LowerDotCaseStrategy(); + /* /********************************************************** /* API @@ -396,7 +405,26 @@ public String translate(String input) return result.toString(); } } - + + /** + * Naming strategy similar to {@link KebabCaseStrategy}, but instead of hyphens + * as separators, uses dots. Naming convention widely used as configuration properties name. + * + * @since 2.10 + */ + public static class LowerDotCaseStrategy extends PropertyNamingStrategyBase { + /* + @Override + public String translate(String input){ + return translateLowerCaseWithSeparator(input, '.'); + } + */ + @Override + public String translate(String input) { + return input.toLowerCase(); + } + } + /* /********************************************************** /* Deprecated variants, aliases diff --git a/src/test/java/com/fasterxml/jackson/databind/BaseMapTest.java b/src/test/java/com/fasterxml/jackson/databind/BaseMapTest.java index b699a380fc..f9a804ea41 100644 --- a/src/test/java/com/fasterxml/jackson/databind/BaseMapTest.java +++ b/src/test/java/com/fasterxml/jackson/databind/BaseMapTest.java @@ -233,14 +233,13 @@ protected static ObjectMapper newObjectMapper() { return new ObjectMapper(); } - // @since 2.10s + // @since 2.10 protected static JsonMapper.Builder objectMapperBuilder() { - /* 27-Aug-2018, tatu: Now this is weird -- with Java 7, we seem to need - * explicit type parameters, but not with Java 8. - * This need renders builder-approach pretty much useless for Java 7, - * which is ok for 3.x (where baseline is Java 8), but potentially - * problematic for 2.10. Oh well. - */ + return JsonMapper.builder(); + } + + // @since 2.10 + protected static JsonMapper.Builder jsonMapperBuilder() { return JsonMapper.builder(); } 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 e59e1d7482..4f5d9ca8db 100644 --- a/src/test/java/com/fasterxml/jackson/databind/introspect/TestNamingStrategyStd.java +++ b/src/test/java/com/fasterxml/jackson/databind/introspect/TestNamingStrategyStd.java @@ -337,6 +337,42 @@ public void testSimpleKebabCase() throws Exception assertEquals("Billy", result.firstName); } + /* + /********************************************************** + /* Test methods for LOWER_DOT_CASE + /********************************************************** + */ + + /* + public void testLowerCaseWithDotsStrategyStandAlone() + { + assertEquals("some.value", + PropertyNamingStrategy.LOWER_DOT_CASE.nameForField(null, null, "someValue")); + assertEquals("some.value", + PropertyNamingStrategy.LOWER_DOT_CASE.nameForField(null, null, "SomeValue")); + assertEquals("url", + PropertyNamingStrategy.LOWER_DOT_CASE.nameForField(null, null, "URL")); + assertEquals("url.stuff", + PropertyNamingStrategy.LOWER_DOT_CASE.nameForField(null, null, "URLStuff")); + assertEquals("some.url.stuff", + PropertyNamingStrategy.LOWER_DOT_CASE.nameForField(null, null, "SomeURLStuff")); + } + + public void testSimpleLowerCaseWithDots() throws Exception + { + final ObjectMapper m = jsonMapperBuilder() + .propertyNamingStrategy(PropertyNamingStrategy.LOWER_DOT_CASE) + .build(); + + final FirstNameBean input = new FirstNameBean("Bob"); + assertEquals(aposToQuotes("{'first.name':'Bob'}"), m.writeValueAsString(input)); + + FirstNameBean result = m.readValue(aposToQuotes("{'first.name':'Billy'}"), + FirstNameBean.class); + assertEquals("Billy", result.firstName); + } + */ + /* /********************************************************** /* Test methods, other