#java #amazon-web-services #aws-lambda #aws-api-gateway
#java #amazon-web-services #aws-lambda #aws-api-gateway
Вопрос:
public class LambdaFunction implements RequestHandler<Map<String, Object>, String> {
Gson gson = new GsonBuilder().create();
@Override
public String handleRequest(Map<String, Object> event, Context context) {
return gson.toJson(new Response());
}
class Response {
int statusCode;
Map<String, String> headers;
Map<String, String> body;
public Response(){
this.statusCode = 300;
this.headers = new HashMap<>();
this.body = new HashMap<>();
this.body.put("key1", "value1");
}
}
}
Я настроил конечную точку с интеграцией прокси для шлюза api, это заключительная часть журнала:
Mon Sep 28 09:30:27 UTC 2020 : Received response. Status: 200, Integration latency: 16 ms
Mon Sep 28 09:30:27 UTC 2020 : Endpoint response headers: {Date=Mon, 28 Sep 2020 09:30:27 GMT, Content-Type=application/json, Content-Length=68, Connection=keep-alive, x-amzn-RequestId=string, x-amzn-Remapped-Content-Length=0, X-Amz-Executed-Version=$LATEST, X-Amzn-Trace-Id=root=string;sampled=0}
Mon Sep 28 09:30:27 UTC 2020 : Endpoint response body before transformations: "{"statusCode":300,"headers":{},"body":{"key1":"value1"}}"
Mon Sep 28 09:30:27 UTC 2020 : Execution failed due to configuration error: Malformed Lambda proxy response
Mon Sep 28 09:30:27 UTC 2020 : Method completed with status: 502
Я понятия не имею, что делать, я уже просмотрел много вопросов, но ни один из них не использовал java. Я также пытался вернуть ответ напрямую, и даже это не работает должным образом. Шлюз не возвращает ошибку, но возвращает 200 с пустым телом (которое должно быть 300 с телом)
Ответ №1:
Если вы не собираетесь использовать код событий Java Lambda, вам нужно убедиться, что поля в ответе правильные. Как вы можете видеть, body
это просто строка:
private Integer statusCode;
private Map<String, String> headers;
private String body;
private Boolean isBase64Encoded;
Ответ №2:
Просматривая официальные примеры кода, которые я нашел здесь, в классе APIGatewayProxyResponseEvent
, я заставил свой собственный Response
класс работать, реализовав его Serializable
и сделав общедоступными методы получения. Однако я не смог заставить его работать со строкой json.