diff --git a/pom.xml b/pom.xml
index ba2b87556..9a546433d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -6,7 +6,6 @@
spring-cloud-function-parent
Spring Cloud Function Parent
- 4.0.0-SNAPSHOT
pom
diff --git a/spring-cloud-function-adapters/spring-cloud-function-adapter-aws/src/main/java/org/springframework/cloud/function/adapter/aws/AWSLambdaUtils.java b/spring-cloud-function-adapters/spring-cloud-function-adapter-aws/src/main/java/org/springframework/cloud/function/adapter/aws/AWSLambdaUtils.java
index 72fb9181c..603701a74 100644
--- a/spring-cloud-function-adapters/spring-cloud-function-adapter-aws/src/main/java/org/springframework/cloud/function/adapter/aws/AWSLambdaUtils.java
+++ b/spring-cloud-function-adapters/spring-cloud-function-adapter-aws/src/main/java/org/springframework/cloud/function/adapter/aws/AWSLambdaUtils.java
@@ -193,7 +193,7 @@ final class AWSLambdaUtils {
}
String body = responseMessage == null
- ? "\"OK\"" : new String(responseMessage.getPayload(), StandardCharsets.UTF_8).replaceAll("\\\"", "");
+ ? "\"OK\"" : new String(responseMessage.getPayload(), StandardCharsets.UTF_8);
response.put("body", body);
if (responseMessage != null) {
diff --git a/spring-cloud-function-adapters/spring-cloud-function-adapter-aws/src/test/java/org/springframework/cloud/function/adapter/aws/FunctionInvokerTests.java b/spring-cloud-function-adapters/spring-cloud-function-adapter-aws/src/test/java/org/springframework/cloud/function/adapter/aws/FunctionInvokerTests.java
index 3b34e8b16..86aaf0d52 100644
--- a/spring-cloud-function-adapters/spring-cloud-function-adapter-aws/src/test/java/org/springframework/cloud/function/adapter/aws/FunctionInvokerTests.java
+++ b/spring-cloud-function-adapters/spring-cloud-function-adapter-aws/src/test/java/org/springframework/cloud/function/adapter/aws/FunctionInvokerTests.java
@@ -701,7 +701,7 @@ public class FunctionInvokerTests {
invoker.handleRequest(targetStream, output, null);
Map result = mapper.readValue(output.toByteArray(), Map.class);
- assertThat(result.get("body")).isEqualTo("HELLO");
+ assertThat(result.get("body")).isEqualTo("\"HELLO\"");
System.clearProperty("spring.cloud.function.definition");
System.setProperty("spring.cloud.function.routing-expression", "'uppercase'");
@@ -711,7 +711,23 @@ public class FunctionInvokerTests {
invoker.handleRequest(targetStream, output, null);
result = this.mapper.readValue(output.toByteArray(), Map.class);
- assertThat(result.get("body")).isEqualTo("HELLO");
+ assertThat(result.get("body")).isEqualTo("\"HELLO\"");
+ }
+
+ @SuppressWarnings("rawtypes")
+ @Test
+ public void testApiGatewayPojoReturninPojo() throws Exception {
+ System.setProperty("MAIN_CLASS", ApiGatewayConfiguration.class.getName());
+ System.setProperty("spring.cloud.function.definition", "uppercasePojoReurnPojo");
+ FunctionInvoker invoker = new FunctionInvoker();
+
+ InputStream targetStream = new ByteArrayInputStream(this.apiGatewayEventWithStructuredBody.getBytes());
+ ByteArrayOutputStream output = new ByteArrayOutputStream();
+ invoker.handleRequest(targetStream, output, null);
+
+ Map response = mapper.readValue(output.toByteArray(), Map.class);
+ Person person = mapper.readValue((String) response.get("body"), Person.class);
+ assertThat(person.getName()).isEqualTo("JIM LAHEY");
}
@SuppressWarnings("rawtypes")
@@ -726,7 +742,7 @@ public class FunctionInvokerTests {
invoker.handleRequest(targetStream, output, null);
Map result = mapper.readValue(output.toByteArray(), Map.class);
- assertThat(result.get("body")).isEqualTo("JIM LAHEY");
+ assertThat(result.get("body")).isEqualTo("\"JIM LAHEY\"");
System.clearProperty("spring.cloud.function.definition");
System.setProperty("spring.cloud.function.routing-expression", "'uppercasePojo'");
@@ -736,7 +752,7 @@ public class FunctionInvokerTests {
invoker.handleRequest(targetStream, output, null);
result = this.mapper.readValue(output.toByteArray(), Map.class);
- assertThat(result.get("body")).isEqualTo("JIM LAHEY");
+ assertThat(result.get("body")).isEqualTo("\"JIM LAHEY\"");
}
@SuppressWarnings("rawtypes")
@@ -752,7 +768,7 @@ public class FunctionInvokerTests {
Map result = mapper.readValue(output.toByteArray(), Map.class);
System.out.println(result);
- assertThat(result.get("body")).isEqualTo("hello");
+ assertThat(result.get("body")).isEqualTo("\"hello\"");
System.clearProperty("spring.cloud.function.definition");
System.setProperty("spring.cloud.function.routing-expression", "'inputApiEvent'");
@@ -762,7 +778,7 @@ public class FunctionInvokerTests {
invoker.handleRequest(targetStream, output, null);
result = this.mapper.readValue(output.toByteArray(), Map.class);
- assertThat(result.get("body")).isEqualTo("hello");
+ assertThat(result.get("body")).isEqualTo("\"hello\"");
}
@SuppressWarnings("rawtypes")
@@ -778,7 +794,7 @@ public class FunctionInvokerTests {
Map result = mapper.readValue(output.toByteArray(), Map.class);
System.out.println(result);
- assertThat(result.get("body")).isEqualTo("Hello from Lambda");
+ assertThat(result.get("body")).isEqualTo("\"Hello from Lambda\"");
System.clearProperty("spring.cloud.function.definition");
System.setProperty("spring.cloud.function.routing-expression", "'inputApiV2Event'");
@@ -788,7 +804,7 @@ public class FunctionInvokerTests {
invoker.handleRequest(targetStream, output, null);
result = this.mapper.readValue(output.toByteArray(), Map.class);
- assertThat(result.get("body")).isEqualTo("Hello from Lambda");
+ assertThat(result.get("body")).isEqualTo("\"Hello from Lambda\"");
}
@SuppressWarnings("rawtypes")
@@ -804,7 +820,7 @@ public class FunctionInvokerTests {
Map result = mapper.readValue(output.toByteArray(), Map.class);
System.out.println(result);
- assertThat(result.get("body")).isEqualTo("boom");
+ assertThat(result.get("body")).isEqualTo("\"boom\"");
}
@SuppressWarnings("rawtypes")
@@ -874,7 +890,7 @@ public class FunctionInvokerTests {
Map result = mapper.readValue(output.toByteArray(), Map.class);
System.out.println(result);
- assertThat(result.get("body")).isEqualTo("hello");
+ assertThat(result.get("body")).isEqualTo("\"hello\"");
}
@SuppressWarnings("rawtypes")
@@ -890,7 +906,7 @@ public class FunctionInvokerTests {
Map result = mapper.readValue(output.toByteArray(), Map.class);
System.out.println(result);
- assertThat(result.get("body")).isEqualTo("hello");
+ assertThat(result.get("body")).isEqualTo("\"hello\"");
}
@SuppressWarnings("rawtypes")
@@ -937,7 +953,7 @@ public class FunctionInvokerTests {
invoker.handleRequest(targetStream, output, null);
Map result = mapper.readValue(output.toByteArray(), Map.class);
- assertThat(result.get("body")).isEqualTo("olleh");
+ assertThat(result.get("body")).isEqualTo("\"olleh\"");
}
@SuppressWarnings("rawtypes")
@@ -953,7 +969,7 @@ public class FunctionInvokerTests {
invoker.handleRequest(targetStream, output, null);
Map result = mapper.readValue(output.toByteArray(), Map.class);
- assertThat(result.get("body")).isEqualTo("OLLEH");
+ assertThat(result.get("body")).isEqualTo("\"OLLEH\"");
}
@SuppressWarnings("unchecked")
@@ -1179,6 +1195,15 @@ public class FunctionInvokerTests {
};
}
+ @Bean
+ public Function uppercasePojoReurnPojo() {
+ return v -> {
+ Person p = new Person();
+ p.setName(v.getName().toUpperCase());
+ return p;
+ };
+ }
+
@Bean
public Function inputApiEvent() {
return v -> {