Возвращает пользовательский код состояния HTTP в AWS Java Lambda?

#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-клиентом.

https://docs.aws.amazon.com/apigateway/latest/developerguide/handle-errors-in-lambda-integration.html

Как заставить 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 ок.