Как я сопоставляю параметры пути от API Шлюза API к Объекту Запроса Лямбды Java - PullRequest
3 голосов
/ 14 апреля 2019

У меня есть лямбда, написанная на Java, которая принимает объект запроса структуры

{
  "id": "be1c320a-144f-464d-b32c-38ec7fb4445b",
  "userId": "foobar"
}

Когда я вызываю эту лямбду через тестовый интерфейс с таким объектом, она отлично работает.

Я хочу создать API, где GET запрос к

/users/foobar/items/be1c320a-144f-464d-b32c-38ec7fb4445b

, т.е. в форме

/users/{userId}/items/{id}

, вызывает эту лямбду.

У меня естьсоответственно создали ресурсы API /users, {userId}, items и {id}.

И я создал метод GET (на /users/{userId}/items/{id}) и связал его с лямбдой.

Когда я тестирую API, он вызывает лямбду, но с нулевыми значениями взапрос.Я вижу, что в журналах упаковано path как {"id":"be1c320a-144f-464d-b32c-38ec7fb4445b","userId": "foobar"}, но оно не отправляется в теле.

Я попытался создать карту шаблона (и пробовал RTFM), но не могу понять, каксопоставить параметры пути с телом.

Как мне добиться этого сопоставления?

1 Ответ

1 голос
/ 17 мая 2019

Я думаю, что ваша структура объекта запроса может быть неправильно настроена.Там может быть несколько способов настроить это.Вот некоторая информация, которая мне помогла.

Как передать строку запроса или параметр маршрута в AWS Lambda из Amazon API Gateway - демонстрирует это сопоставление (хотя и с python).Однако, принимая верхний ответ , если вы включите «Использовать интеграцию Lambda Proxy», вы также можете сделать это с Java следующим образом:

@Override
public Object handleRequest(APIGatewayProxyRequestEvent input, Context context) {

    Map<String, String> pathParameters = input.getPathParameters();
    String id = pathParameters.get("id");
    String userId = pathParameters.get("userId");

    // Handle rest of request..

}

Это использование с помощьюбезсерверная структура для создания API с Java.Этот учебник аналогичным образом обращается к pathParameters, анализируя ввод, а не используя класс APIGatewayProxyRequestEvent java.

@Override
public Object handleRequest(Map<String, Object> input, Context context) {

    try {
        // get the 'pathParameters' from input
        Map<String,String> pathParameters =  (Map<String,String>)input.get("pathParameters");
        String id = pathParameters.get("id");
        String userId = pathParameters.get("userId");

    } catch (Exception ex) {
        logger.error("Error in retrieving product: " + ex);

    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...