Тело запроса AWS API Gateway в виде Java POJO для функции - PullRequest
0 голосов
/ 20 июня 2019

У меня просто была действительно базовая проблема с использованием aws-lambda, API Gateway и безсерверной инфраструктуры.Я просто хотел передать тело почтового запроса как Java POJO.

Хорошо, вот настройка:

POJO:

public class Person {
    private String lastName;
    private string firstName;

    ... Setters and Getters omitted
}

Обработчик:

public class PersonHandler implements RequestHandler<Person, ApiGatewayResponse> {
    @Override
    public ApiGatewayResponse handleRequest(lastNamePerson person, Context context) {
        //... do something
     }
}

И полезная нагрузка в теле запроса поста будетbe

{
    "lastName" : "John",
    "firstName" : "Doe"
}

И, наконец, что не менее важно, serverless.yml

{
...
functions:person
handler:com.serverless.handler
event:
  -http:
    path:person
    method:post
...
}

Ну, выглядит довольно просто, не так ли?

К сожалению, не все так просто.Person POJO всегда будет пустым при вызове функции.Как мы можем передать тело в виде POJO в AWS API Gateway & Lambda?

1 Ответ

0 голосов
/ 20 июня 2019

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

Но сначала давайте посмотрим на реальную проблему. Тело будет находиться не в корне, а в файле input.body, и тогда Джексон не знает, где найти вашу личность.

Итак, сначала нам нужно перейти от лямбда-прокси-интеграции к лямбда-интеграции.

И затем мы должны указать интеграции передать объект в качестве полезной нагрузки для функции.

Это дает нам следующий serverless.yml:

{
...
functions:person
handler:com.serverless.handler
event:
  -http:
    path:person
    method:post
    integration:lambda
    request:
      template:
        application/json:'$input.body'
...
}

e вуаля, теперь ваш POJO будет заполнен. Надеюсь, что это поможет, и дайте мне знать, если кто-нибудь нашел более простое или лучшее решение для этого.

Источники:

https://serverless.com/framework/docs/providers/aws/events/apigateway/#request-templates

Не удалось разобрать тело запроса в json: неожиданный символ (\ '- \' (код 45)) AWS Lambda + API + Почтальон (для форматирования yml)

...