diff --git a/spring-cloud-function-adapters/spring-cloud-function-adapter-aws/pom.xml b/spring-cloud-function-adapters/spring-cloud-function-adapter-aws/pom.xml
index 015e78bfa..8bc840369 100644
--- a/spring-cloud-function-adapters/spring-cloud-function-adapter-aws/pom.xml
+++ b/spring-cloud-function-adapters/spring-cloud-function-adapter-aws/pom.xml
@@ -20,7 +20,7 @@
UTF-8
UTF-8
1.8
- 1.2.1
+ 2.0.2
diff --git a/spring-cloud-function-adapters/spring-cloud-function-adapter-aws/src/main/java/org/springframework/cloud/function/adapter/aws/SpringBootApiGatewayRequestHandler.java b/spring-cloud-function-adapters/spring-cloud-function-adapter-aws/src/main/java/org/springframework/cloud/function/adapter/aws/SpringBootApiGatewayRequestHandler.java
new file mode 100644
index 000000000..720ffd861
--- /dev/null
+++ b/spring-cloud-function-adapters/spring-cloud-function-adapter-aws/src/main/java/org/springframework/cloud/function/adapter/aws/SpringBootApiGatewayRequestHandler.java
@@ -0,0 +1,96 @@
+package org.springframework.cloud.function.adapter.aws;
+
+import com.amazonaws.services.lambda.runtime.events.APIGatewayProxyRequestEvent;
+import com.amazonaws.services.lambda.runtime.events.APIGatewayProxyResponseEvent;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.cloud.function.context.catalog.FunctionInspector;
+import org.springframework.messaging.Message;
+import org.springframework.messaging.MessageHeaders;
+import org.springframework.messaging.support.GenericMessage;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class SpringBootApiGatewayRequestHandler extends SpringBootRequestHandler {
+
+ @Autowired
+ private ObjectMapper mapper;
+
+ @Autowired
+ private FunctionInspector inspector;
+
+ public SpringBootApiGatewayRequestHandler(Class> configurationClass) {
+ super(configurationClass);
+ }
+
+ public SpringBootApiGatewayRequestHandler() {
+ super();
+ }
+
+ protected Object convertEvent(APIGatewayProxyRequestEvent event) {
+ Object body = deserializeBody(event.getBody());
+ if (functionAcceptsMessage()) {
+ return new GenericMessage<>(body, getHeaders(event));
+ } else {
+ return body;
+ }
+ }
+
+ private boolean functionAcceptsMessage() {
+ return inspector.isMessage(function());
+ }
+
+ private Object deserializeBody(String json) {
+ try {
+ return mapper.readValue(json, getInputType());
+ } catch (Exception e) {
+ throw new IllegalStateException("Cannot convert event", e);
+ }
+ }
+
+ private MessageHeaders getHeaders(APIGatewayProxyRequestEvent event) {
+ Map headers = new HashMap<>();
+ if (event.getHeaders() != null) {
+ headers.putAll(event.getHeaders());
+ }
+ headers.put("request", event);
+ return new MessageHeaders(headers);
+ }
+
+ protected APIGatewayProxyResponseEvent convertOutput(Object output) {
+ if (functionReturnsMessage(output)) {
+ Message message = (Message) output;
+ return new APIGatewayProxyResponseEvent()
+ .withStatusCode((Integer) message.getHeaders().getOrDefault("statusCode", 200))
+ .withHeaders(toResponseHeaders(message.getHeaders()))
+ .withBody(serializeBody(message.getPayload()));
+ } else {
+ return new APIGatewayProxyResponseEvent()
+ .withStatusCode(200)
+ .withBody(serializeBody(output));
+
+
+ }
+ }
+
+ private boolean functionReturnsMessage(Object output) {
+ return output instanceof Message;
+ }
+
+ private Map toResponseHeaders(MessageHeaders messageHeaders) {
+ Map responseHeaders = new HashMap<>();
+ messageHeaders.forEach((key, value) -> responseHeaders.put(key, value.toString()));
+ return responseHeaders;
+ }
+
+ private String serializeBody(Object body) {
+ try {
+ return mapper.writeValueAsString(body);
+ } catch (JsonProcessingException e) {
+ throw new IllegalStateException("Cannot convert output", e);
+ }
+ }
+
+}
diff --git a/spring-cloud-function-adapters/spring-cloud-function-adapter-aws/src/main/java/org/springframework/cloud/function/adapter/aws/SpringBootRequestHandler.java b/spring-cloud-function-adapters/spring-cloud-function-adapter-aws/src/main/java/org/springframework/cloud/function/adapter/aws/SpringBootRequestHandler.java
index ec1bdec8f..e3385478e 100644
--- a/spring-cloud-function-adapters/spring-cloud-function-adapter-aws/src/main/java/org/springframework/cloud/function/adapter/aws/SpringBootRequestHandler.java
+++ b/spring-cloud-function-adapters/spring-cloud-function-adapter-aws/src/main/java/org/springframework/cloud/function/adapter/aws/SpringBootRequestHandler.java
@@ -49,7 +49,7 @@ public class SpringBootRequestHandler extends SpringFunctionInitializer im
private Object result(Object input, Flux> output) {
List