diff --git a/spring-cloud-function-web/src/main/java/org/springframework/cloud/function/web/RequestProcessor.java b/spring-cloud-function-web/src/main/java/org/springframework/cloud/function/web/RequestProcessor.java index a4ab3da94..a2a84cdd2 100644 --- a/spring-cloud-function-web/src/main/java/org/springframework/cloud/function/web/RequestProcessor.java +++ b/spring-cloud-function-web/src/main/java/org/springframework/cloud/function/web/RequestProcessor.java @@ -145,7 +145,7 @@ public class RequestProcessor { Type jsonType = body.startsWith("[") && Collection.class.isAssignableFrom(inputType) || body.startsWith("{") ? inputType : Collection.class; - if (body.startsWith("[")) { + if (body.startsWith("[") && itemType instanceof Class) { jsonType = ResolvableType.forClassWithGenerics((Class) jsonType, (Class) itemType).getType(); } diff --git a/spring-cloud-function-web/src/test/java/org/springframework/cloud/function/web/flux/HttpPostIntegrationTests.java b/spring-cloud-function-web/src/test/java/org/springframework/cloud/function/web/flux/HttpPostIntegrationTests.java index 3cd1db1e9..e44a14dec 100644 --- a/spring-cloud-function-web/src/test/java/org/springframework/cloud/function/web/flux/HttpPostIntegrationTests.java +++ b/spring-cloud-function-web/src/test/java/org/springframework/cloud/function/web/flux/HttpPostIntegrationTests.java @@ -351,6 +351,15 @@ public class HttpPostIntegrationTests { String.class).getBody()).isEqualTo("{\"A\":2,\"B\":1}"); } + @Test + public void fluxWithList() throws Exception { + List list = Arrays.asList("A", "B", "A"); + assertThat(this.rest.exchange( + RequestEntity.post(new URI("/fluxCollectionEcho")).accept(MediaType.APPLICATION_JSON) + .contentType(MediaType.APPLICATION_JSON).body(list), + String.class).getBody()).isEqualTo("[\"A\",\"B\",\"A\"]"); + } + private String sse(String... values) { return "data:" + StringUtils.arrayToDelimitedString(values, "\n\ndata:") + "\n\n"; } @@ -481,6 +490,11 @@ public class HttpPostIntegrationTests { (map, word) -> map.merge(word, 1, Integer::sum)); } + @Bean + public Function>, Flux> fluxCollectionEcho() { + return flux -> flux.flatMap(v -> Flux.fromIterable(v)); + } + } public static class Foo {