From 53251a9f9cf70674c6d75cd2e985d73aed1b0441 Mon Sep 17 00:00:00 2001 From: Stephane Nicoll Date: Thu, 20 Aug 2015 10:43:12 +0200 Subject: [PATCH] Add suffix dot on prefix only if necessary Closes gh-3787 --- .../springframework/boot/bind/RelaxedDataBinder.java | 10 +++++++++- .../boot/bind/RelaxedDataBinderTests.java | 7 +++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/spring-boot/src/main/java/org/springframework/boot/bind/RelaxedDataBinder.java b/spring-boot/src/main/java/org/springframework/boot/bind/RelaxedDataBinder.java index 529198251c8..153aad6a180 100644 --- a/spring-boot/src/main/java/org/springframework/boot/bind/RelaxedDataBinder.java +++ b/spring-boot/src/main/java/org/springframework/boot/bind/RelaxedDataBinder.java @@ -45,6 +45,7 @@ import org.springframework.validation.DataBinder; * * @author Dave Syer * @author Phillip Webb + * @author Stephane Nicoll * @see RelaxedNames */ public class RelaxedDataBinder extends DataBinder { @@ -73,7 +74,14 @@ public class RelaxedDataBinder extends DataBinder { public RelaxedDataBinder(Object target, String namePrefix) { super(wrapTarget(target), (StringUtils.hasLength(namePrefix) ? namePrefix : DEFAULT_OBJECT_NAME)); - this.namePrefix = (StringUtils.hasLength(namePrefix) ? namePrefix + "." : null); + this.namePrefix = cleanNamePrefix(namePrefix); + } + + private static String cleanNamePrefix(String namePrefix) { + if (!StringUtils.hasLength(namePrefix)) { + return null; + } + return (namePrefix.endsWith(".") ? namePrefix : namePrefix + "."); } /** diff --git a/spring-boot/src/test/java/org/springframework/boot/bind/RelaxedDataBinderTests.java b/spring-boot/src/test/java/org/springframework/boot/bind/RelaxedDataBinderTests.java index 230233fbb76..71b8a92c5e7 100644 --- a/spring-boot/src/test/java/org/springframework/boot/bind/RelaxedDataBinderTests.java +++ b/spring-boot/src/test/java/org/springframework/boot/bind/RelaxedDataBinderTests.java @@ -95,6 +95,13 @@ public class RelaxedDataBinderTests { assertEquals("bar", target.getFoo()); } + @Test + public void testBindStringWithPrefixDotSuffix() throws Exception { + VanillaTarget target = new VanillaTarget(); + bind(target, "some.test.foo: bar", "some.test."); + assertEquals("bar", target.getFoo()); + } + @Test public void testBindFromEnvironmentStyleWithPrefix() throws Exception { VanillaTarget target = new VanillaTarget();