diff --git a/spring-cloud-function-web/src/main/java/org/springframework/cloud/function/web/util/FunctionWebUtils.java b/spring-cloud-function-web/src/main/java/org/springframework/cloud/function/web/util/FunctionWebUtils.java index 14c98ed3a..504977e73 100644 --- a/spring-cloud-function-web/src/main/java/org/springframework/cloud/function/web/util/FunctionWebUtils.java +++ b/spring-cloud-function-web/src/main/java/org/springframework/cloud/function/web/util/FunctionWebUtils.java @@ -62,7 +62,7 @@ public final class FunctionWebUtils { String name = path; String[] splitPath = path.split("/"); Function function = null; - for (int i = 0; i < splitPath.length || function != null; i++) { + for (int i = 0; i < splitPath.length && functionForGet == null; i++) { String element = splitPath[i]; if (builder.length() > 0) { builder.append("/"); diff --git a/spring-cloud-function-web/src/test/java/org/springframework/cloud/function/web/flux/HttpGetIntegrationTests.java b/spring-cloud-function-web/src/test/java/org/springframework/cloud/function/web/flux/HttpGetIntegrationTests.java index cf47802e8..a4505c7db 100644 --- a/spring-cloud-function-web/src/test/java/org/springframework/cloud/function/web/flux/HttpGetIntegrationTests.java +++ b/spring-cloud-function-web/src/test/java/org/springframework/cloud/function/web/flux/HttpGetIntegrationTests.java @@ -244,6 +244,14 @@ public class HttpGetIntegrationTests { .getBody()).isEqualTo("{\"value\":321}"); } + @Test + public void compose() throws Exception { + ResponseEntity result = this.rest.exchange(RequestEntity + .get(new URI("/concat,reverse/foo")).accept(MediaType.TEXT_PLAIN).build(), + String.class); + assertThat(result.getBody()).isEqualTo("oofoof"); + } + private String sse(String... values) { return "data:" + StringUtils.arrayToDelimitedString(values, "\n\ndata:") + "\n\n"; } @@ -259,6 +267,17 @@ public class HttpGetIntegrationTests { args); } + @Bean + public Function, Flux> concat() { + return flux -> flux.map(v -> v + v); + } + + @Bean + public Function, Flux> reverse() { + return flux -> flux.log() + .map(value -> new StringBuilder(value.trim()).reverse().toString()); + } + @Bean({ "uppercase", "post/more" }) public Function, Flux> uppercase() { return flux -> flux.log() diff --git a/spring-cloud-function-web/src/test/java/org/springframework/cloud/function/web/mvc/HttpGetIntegrationTests.java b/spring-cloud-function-web/src/test/java/org/springframework/cloud/function/web/mvc/HttpGetIntegrationTests.java index 66bf6d07d..b59144c48 100644 --- a/spring-cloud-function-web/src/test/java/org/springframework/cloud/function/web/mvc/HttpGetIntegrationTests.java +++ b/spring-cloud-function-web/src/test/java/org/springframework/cloud/function/web/mvc/HttpGetIntegrationTests.java @@ -237,6 +237,14 @@ public class HttpGetIntegrationTests { .getBody()).isEqualTo("{\"value\":321}"); } + @Test + public void compose() throws Exception { + ResponseEntity result = this.rest.exchange(RequestEntity + .get(new URI("/concat,reverse/foo")).accept(MediaType.TEXT_PLAIN).build(), + String.class); + assertThat(result.getBody()).isEqualTo("oofoof"); + } + private String sse(String... values) { return "data:" + StringUtils.arrayToDelimitedString(values, "\n\ndata:") + "\n\n"; } @@ -252,6 +260,17 @@ public class HttpGetIntegrationTests { args); } + @Bean + public Function, Flux> concat() { + return flux -> flux.map(v -> v + v); + } + + @Bean + public Function, Flux> reverse() { + return flux -> flux.log() + .map(value -> new StringBuilder(value.trim()).reverse().toString()); + } + @Bean({ "uppercase", "post/more" }) public Function, Flux> uppercase() { return flux -> flux.log()