#java #amazon-web-services #http-headers #aws-lambda #aws-api-gateway
#java #amazon-веб-сервисы #http-заголовки #aws-lambda #aws-api-gateway
Вопрос:
Я пытаюсь получить HTTP-заголовки и детали тела в AWS Lambda-функции с помощью java, которые отправляются методом POST с использованием AWS API. На данный момент я успешно установил соединение между AWS API и AWS Lambda-функцией и могу вызвать его из шлюза API. Теперь, чтобы передать заголовки в лямбда-функцию, я выполнил все шаги перед «Обновлением лямбда-функции» отсюда. Ниже приведен мой лямбда-код:
import com.amazonaws.Request;
import com.amazonaws.Response;
import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.RequestHandler;
import com.amazonaws.services.lambda.runtime.events.S3Event;
public class SimpleSysout implements RequestHandler<Request, String> {
public String handleRequest(Request request, Context context) {
System.out.println("Method = " request.getHttpMethod());
System.out.println("Headers= " request.getHeaders().toString());
System.out.println("Content= " request.getContent().toString());
System.out.println("Servcie Name = " request.getServiceName().toString());
System.out.println("Resource Path = " request.getResourcePath().toString());
return request.toString();
}
}
Но я получаю ошибку типа
{
"errorMessage": "An error occurred during JSON parsing",
"errorType": "java.lang.RuntimeException",
"stackTrace": [],
"cause": {
"errorMessage": "com.fasterxml.jackson.databind.JsonMappingException: Can not construct instance of com.amazonaws.Request, problem: abstract types either need to be mapped to concrete types, have custom deserializer, or be instantiated with additional type informationn at [Source: lambdainternal.util.NativeMemoryAsInputStream@4dfa3a9d; line: 1, column: 1]",
"errorType": "java.io.UncheckedIOException",
"stackTrace": [],
"cause": {
"errorMessage": "Can not construct instance of com.amazonaws.Request, problem: abstract types either need to be mapped to concrete types, have custom deserializer, or be instantiated with additional type informationn at [Source: lambdainternal.util.NativeMemoryAsInputStream@4dfa3a9d; line: 1, column: 1]",
"errorType": "com.fasterxml.jackson.databind.JsonMappingException",
"stackTrace": [
"com.fasterxml.jackson.databind.JsonMappingException.from(JsonMappingException.java:148)",
"com.fasterxml.jackson.databind.DeserializationContext.instantiationException(DeserializationContext.java:889)",
"com.fasterxml.jackson.databind.deser.AbstractDeserializer.deserialize(AbstractDeserializer.java:139)",
"com.fasterxml.jackson.databind.ObjectReader._bindAndClose(ObjectReader.java:1511)",
"com.fasterxml.jackson.databind.ObjectReader.readValue(ObjectReader.java:1102)"
]
}
}
}
Я также пытался использовать другие параметры вместо запроса, такие как события, но ни один из них не работает.
Комментарии:
1. Можете ли вы опубликовать свой шаблон сопоставления.
Ответ №1:
Что-то не так с вашим шаблоном сопоставления полезной нагрузки. Во время настройки API gateway вы можете указать, как вы хотите сопоставить запрос с событием. Есть также несколько готовых шаблонов, из которых вы можете выбрать.
Взгляните на этот документ от Amazon:
Полезная нагрузка запроса API и ответа API-шлюза — ссылка на шаблон сопоставления
Дайте мне знать, если вам понадобится дополнительная помощь.
Ответ №2:
handleRequest(InputStream входной поток, OutputStream выходной поток, контекстный контекст)
Я даю вам ссылку, где указана правильная реализация для получения ваших заголовков из JSON.