RequestHandler из AWS возвращает нулевой указатель

public class LambdaFunctionHandler implements RequestHandler<Person, String> {

private static AmazonDynamoDB client;
private static Item item;

// TODO: implement your handler
@Override
public String handleRequest(Person input, Context context) {
    context.getLogger().log("Input: " + input.toString());

    try {
        //initialize the connection
        init();

        DynamoDB dynamoDB = new DynamoDB(client);

        Table table = dynamoDB.getTable("Person");

        item = table.getItem("PersonID", input.getPersonID());

    } catch (Exception e) {
        // TODO: handle exception
        System.out.println(e.getMessage());
    }

    return item.toJSON();
}
}

Здравствуйте, я пытаюсь заставить этот пример работать, чтобы более глубоко понять функциональность лямбда-выражения AWS. У объекта person есть только одно поле - id как переменная с конструктором, получателем и установщиком. Запрос на вызов, который я отправил, представляет собой json в этой форме:

{
 "PersonID": 1
}

Моя проблема возникает, когда я запускаю его (функция запуска на AWS lambda), ввод человека не принимает значение из запроса json и имеет значение null, поэтому он рушится (исключение нулевого указателя). У вас есть какие-нибудь рекомендации?

Вы уверены, что json передается? Вы пробовали просто использовать String вместо Person в качестве теста?

jeff 08.04.2018 16:32

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

Giota 08.04.2018 16:53

Вы можете попробовать изменить input в своем обработчике с Person на String. Мне интересно, связана ли проблема с доставкой тела POST или с его десериализацией в Person.

jeff 08.04.2018 17:36

Возможно, проблема связана с соглашениями об именах POJO / JavaBean. Вместо PersonID в вашем событии JSON попробуйте personID с методом получения getPersonID (). Это при условии, что он разрешает ID и не требует, чтобы вы называли его Id.

jarmod 08.04.2018 19:05

@ jarmod2 Ваша идея была правильной, следуя соглашениям об именах, сериализация произошла сразу без нулевого указателя. Спасибо за это.

Giota 08.04.2018 21:13

@Giota - Потрясающе. Я нашел решение своей проблемы в этом посте. Я боролся с той же проблемой. Было бы хорошо, если бы вы могли опубликовать ответ на этот пост и принять его

Andy Dufresne 29.05.2020 11:47
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
4
6
413
0

Другие вопросы по теме