#amazon-web-services #aws-lambda #aws-api-gateway
Вопрос:
Я пытаюсь заставить свою функцию AWS Lambda, написанную на Java, возвращать модель JSON с ошибкой. Проблема в том, что при отправке запроса с помощью Postman или любого другого HTTP-клиента код состояния HTTP, возвращаемый шлюзом API, равен 200. Мне нужно, чтобы код состояния HTTP был тем, который я возвращаю в JSON.
Из следующей страницы документации я узнал, что для этого мой код AWS Java Lambda должен возвращать определенный заголовок и явно задавать код состояния HTTP в JSON. Но это все равно приводит к коду состояния 200 OK, полученному HTTP-клиентом.
Как заставить AWS API Gateway возвращать код состояния HTTP, который я вручную задал в ответе JSON?
Это не интеграция с прокси-сервером, поэтому я не могу использовать APIGatewayProxyResponseEvent.
Мой AWS Java lambda возвращает строку JSON, которая выглядит следующим образом.
{
"statusCode": 502,
"isBase64Encoded": false,
"headers": {
"X-Amzn-ErrorType": "InvalidParameterException",
"content-type": "application/json"
},
"body": {
"requestId": "a4c946aa-3ca9-4252-ab6c-4f5fb1c6f53e",
"errorMessage": "InternalServerError Manually triggered error"
}
}
Большое вам спасибо за ваш совет!
Комментарии:
1. Я не могу воспроизвести это, но я не использую библиотеку событий Amazon. Тело моего ответа «убежало» (т. Е.
"body": "{"id":"7MRuzIYgaFd"
и так далее). Когда я возвращаю 502, он попадает к клиенту. Я использую шлюз API «HTTP API» — что вы используете?2. @stdunbar, спасибо за ваш ответ. Я создал этот API как REST API. И клиент тестирования шлюза API, и журналы, и клиент почтальона-все они показывают код состояния HTTP 200 OK для этого ответа. Хотя код состояния установлен на 502. Я постараюсь избавиться от содержимого тела. Давайте посмотрим, поможет ли это.
3. @stdunbar, я попытался вернуть пустой JSON в теле «{}» и все равно получил 200 ок. Попытался избежать содержимого тела {«ошибка»:»ошибка»}, и все равно код состояния ответа 200 ок.