diff --git a/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/EnvironmentController.java b/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/EnvironmentController.java index ad7ec67f..75018099 100644 --- a/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/EnvironmentController.java +++ b/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/EnvironmentController.java @@ -18,6 +18,7 @@ package org.springframework.cloud.config.server; import java.io.IOException; import java.util.ArrayList; import java.util.Collections; +import java.util.HashMap; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; @@ -27,7 +28,6 @@ import java.util.TreeMap; import javax.servlet.http.HttpServletResponse; import org.yaml.snakeyaml.Yaml; - import org.springframework.boot.bind.PropertiesConfigurationFactory; import org.springframework.cloud.config.environment.Environment; import org.springframework.cloud.config.environment.PropertySource; @@ -72,7 +72,8 @@ public class EnvironmentController { } @RequestMapping("/{name}/{profiles:.*[^-].*}") - public Environment defaultLabel(@PathVariable String name, @PathVariable String profiles) { + public Environment defaultLabel(@PathVariable String name, + @PathVariable String profiles) { return labelled(name, profiles, defaultLabel); } @@ -159,7 +160,7 @@ public class EnvironmentController { factory.bindPropertiesToTarget(); @SuppressWarnings("unchecked") Map result = (Map) target.get(MAP_PREFIX); - return result==null ? new LinkedHashMap() : result; + return result == null ? new LinkedHashMap() : result; } @ExceptionHandler(IllegalArgumentException.class) @@ -185,9 +186,9 @@ public class EnvironmentController { HttpStatus.OK); } - private ResponseEntity> getSuccess(Map body, MediaType mediaType) { - return new ResponseEntity<>(body, getHttpHeaders(mediaType), - HttpStatus.OK); + private ResponseEntity> getSuccess(Map body, + MediaType mediaType) { + return new ResponseEntity<>(body, getHttpHeaders(mediaType), HttpStatus.OK); } /** @@ -272,7 +273,12 @@ public class EnvironmentController { * @param overrides the overrides to set */ public void setOverrides(Map overrides) { - this.overrides = overrides; + this.overrides = new HashMap(overrides); + for (String key : overrides.keySet()) { + if (overrides.get(key).contains("$\\{")) { + this.overrides.put(key, overrides.get(key).replace("$\\{", "${")); + } + } } } diff --git a/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/EnvironmentControllerTests.java b/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/EnvironmentControllerTests.java index 1806a7f6..19b69e8b 100644 --- a/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/EnvironmentControllerTests.java +++ b/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/EnvironmentControllerTests.java @@ -234,4 +234,15 @@ public class EnvironmentControllerTests { .get(0).getSource().toString()); } + @Test + public void overrideWithEscapedPlaceholders() throws Exception { + controller.setOverrides(Collections.singletonMap("foo", "$\\{bar}")); + Map map = new HashMap(); + map.put("bar", "foo"); + environment.add(new PropertySource("one", map)); + Mockito.when(repository.findOne("foo", "bar", "master")).thenReturn(environment); + assertEquals("{foo=${bar}}", controller.defaultLabel("foo", "bar").getPropertySources() + .get(0).getSource().toString()); + } + }