diff --git a/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/resource/ResourceController.java b/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/resource/ResourceController.java index 98dfd542..e458b6c9 100644 --- a/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/resource/ResourceController.java +++ b/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/resource/ResourceController.java @@ -65,6 +65,11 @@ public class ResourceController { @PathVariable String profile, @PathVariable String label, @PathVariable String path) throws IOException { StandardEnvironment environment = new StandardEnvironment(); + if (label != null && label.contains("(_)")) { + // "(_)" is uncommon in a git branch name, but "/" cannot be matched + // by Spring MVC + label = label.replace("(_)", "/"); + } environment.getPropertySources().addAfter( StandardEnvironment.SYSTEM_PROPERTIES_PROPERTY_SOURCE_NAME, new EnvironmentPropertySource( diff --git a/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/resource/ResourceControllerTests.java b/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/resource/ResourceControllerTests.java index 6cb51664..aefd4a9e 100644 --- a/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/resource/ResourceControllerTests.java +++ b/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/resource/ResourceControllerTests.java @@ -78,4 +78,11 @@ public class ResourceControllerTests { assertEquals("foo: ${foo}", resource); } + @Test + public void labelWithSlash() throws Exception { + this.environmentRepository.setSearchLocations("classpath:/test"); + String resource = this.controller.resolve("foo", "bar", "dev(_)spam", "foo.txt"); + assertEquals("foo: dev_bar/spam", resource); + } + } diff --git a/spring-cloud-config-server/src/test/resources/test/dev/spam/foo.txt b/spring-cloud-config-server/src/test/resources/test/dev/spam/foo.txt new file mode 100644 index 00000000..cf319c34 --- /dev/null +++ b/spring-cloud-config-server/src/test/resources/test/dev/spam/foo.txt @@ -0,0 +1 @@ +foo: dev_bar/spam \ No newline at end of file