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 979ebc912..49c3b759d 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 @@ -120,25 +120,21 @@ final class AWSLambdaUtils { } if (request instanceof Map) { + logger.info("Incoming MAP: " + request); if (((Map) request).containsKey("httpMethod")) { //API Gateway + logger.info("Incoming request is API Gateway"); boolean mapInputType = (inputType instanceof ParameterizedType && ((Class) ((ParameterizedType) inputType).getRawType()).isAssignableFrom(Map.class)); if (mapInputType) { messageBuilder = MessageBuilder.withPayload(request).setHeader("httpMethod", ((Map) request).get("httpMethod")); + messageBuilder.setHeader(AWS_API_GATEWAY, true); } else { - Object body = ((Map) request).remove("body"); - try { - body = body instanceof String - ? String.valueOf(body).getBytes(StandardCharsets.UTF_8) - : objectMapper.writeValueAsBytes(body); - } - catch (Exception e) { - throw new IllegalStateException(e); - } - - messageBuilder = MessageBuilder.withPayload(body).copyHeaders(((Map) request)); + messageBuilder = createMessageBuilderForPOJOFunction(objectMapper, (Map) request); } - messageBuilder.setHeader(AWS_API_GATEWAY, true); + } + else if ((((Map) request).containsKey("routeKey") && ((Map) request).containsKey("version"))) { + logger.info("Incoming request is API Gateway v2.0"); + messageBuilder = createMessageBuilderForPOJOFunction(objectMapper, (Map) request); } Object providedHeaders = ((Map) request).remove("headers"); if (providedHeaders != null && providedHeaders instanceof Map) { @@ -163,6 +159,24 @@ final class AWSLambdaUtils { return messageBuilder.copyHeaders(headers).build(); } + @SuppressWarnings({ "rawtypes", "unchecked" }) + private static MessageBuilder createMessageBuilderForPOJOFunction(ObjectMapper objectMapper, Map request) { + Object body = request.remove("body"); + try { + body = body instanceof String + ? String.valueOf(body).getBytes(StandardCharsets.UTF_8) + : objectMapper.writeValueAsBytes(body); + } + catch (Exception e) { + throw new IllegalStateException(e); + } + logger.info("Body is " + body); + + MessageBuilder messageBuilder = MessageBuilder.withPayload(body).copyHeaders(request); + messageBuilder.setHeader(AWS_API_GATEWAY, true); + return messageBuilder; + } + @SuppressWarnings({ "rawtypes", "unchecked" }) public static byte[] generateOutput(Message requestMessage, Message responseMessage, ObjectMapper objectMapper, Type functionOutputType) {