diff --git a/spring-boot-cli/src/main/executablecontent/bin/spring b/spring-boot-cli/src/main/executablecontent/bin/spring index c9aec1e479..c13b79b31b 100755 --- a/spring-boot-cli/src/main/executablecontent/bin/spring +++ b/spring-boot-cli/src/main/executablecontent/bin/spring @@ -69,7 +69,7 @@ if [ -z "${SPRING_HOME}" ]; then done SAVED="`pwd`" cd "`dirname \"$PRG\"`/../" >&- - SPRING_HOME="`pwd -P`" + export SPRING_HOME="`pwd -P`" cd "$SAVED" >&- fi 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 e6b942db4a..36465b2a0d 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 @@ -28,6 +28,7 @@ import org.springframework.beans.BeanWrapperImpl; import org.springframework.beans.InvalidPropertyException; import org.springframework.beans.MutablePropertyValues; import org.springframework.beans.PropertyValue; +import org.springframework.core.convert.ConversionService; import org.springframework.core.convert.TypeDescriptor; import org.springframework.util.StringUtils; import org.springframework.validation.DataBinder; @@ -47,6 +48,8 @@ public class RelaxedDataBinder extends DataBinder { private boolean ignoreNestedProperties; + private ConversionService relaxedConversionService; + /** * Create a new {@link RelaxedDataBinder} instance. * @param target the target into which properties are bound @@ -76,12 +79,19 @@ public class RelaxedDataBinder extends DataBinder { this.ignoreNestedProperties = ignoreNestedProperties; } + @Override + public void setConversionService(ConversionService conversionService) { + super.setConversionService(conversionService); + this.relaxedConversionService = new RelaxedConversionService(getConversionService()); + } + @Override public void initBeanPropertyAccess() { super.initBeanPropertyAccess(); + this.relaxedConversionService = (this.relaxedConversionService != null + ? this.relaxedConversionService : new RelaxedConversionService(getConversionService())); // Hook in the RelaxedConversionService - getInternalBindingResult().initConversion( - new RelaxedConversionService(getConversionService())); + getInternalBindingResult().initConversion(relaxedConversionService); } @Override @@ -111,6 +121,7 @@ public class RelaxedDataBinder extends DataBinder { } BeanWrapper targetWrapper = new BeanWrapperImpl(target); + targetWrapper.setConversionService(this.relaxedConversionService); targetWrapper.setAutoGrowNestedPaths(true); List list = propertyValues.getPropertyValueList(); @@ -189,7 +200,6 @@ public class RelaxedDataBinder extends DataBinder { TypeDescriptor descriptor = wrapper.getPropertyTypeDescriptor(name); if (descriptor == null || descriptor.isMap()) { if (descriptor != null) { - wrapper.getPropertyValue(name + "[foo]"); TypeDescriptor valueDescriptor = descriptor.getMapValueTypeDescriptor(); if (valueDescriptor != null) { Class valueType = valueDescriptor.getObjectType(); 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 9ac75a252e..b918e6e978 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 @@ -284,6 +284,15 @@ public class RelaxedDataBinderTests { assertEquals("123", target.getNested().get("value.foo")); } + @Test + public void testBindNestedMapOfEnum() throws Exception { + this.conversionService = new DefaultConversionService(); + TargetWithNestedMapOfEnum target = new TargetWithNestedMapOfEnum(); + bind(target, "nested.this: bar\n" + "nested.ThAt: 123"); + assertEquals("bar", target.getNested().get(Bingo.THIS)); + assertEquals("123", target.getNested().get(Bingo.THAT)); + } + @Test public void testBindNestedMapBracketReferenced() throws Exception { TargetWithNestedMap target = new TargetWithNestedMap(); @@ -578,6 +587,19 @@ public class RelaxedDataBinderTests { } + public static class TargetWithNestedMapOfEnum { + + private Map nested; + + public Map getNested() { + return nested; + } + + public void setNested(Map nested) { + this.nested = nested; + } + } + public static class TargetWithNestedMapOfListOfString { private Map> nested;