Разбор ввода в дескрипторе AWS Lambda, запрос в POJO - PullRequest
0 голосов
/ 11 ноября 2018

Я занимаюсь разработкой навыков Alexa и у меня возникли некоторые проблемы в лямбда-выражении (написанном на Java) при разборе события ввода.

Мой класс Lamba такой

public class AWSLambdaLaunch implements RequestHandler<RequestEnvelope, ResponseEnvelope>{

  @Override
  public ResponseEnvelope handleRequest(RequestEnvelope requestEnvelope, Context context) {
    //...
  }
}

Но я получаю следующую ошибку

com.fasterxml.jackson.databind.JsonMappingException: No suitable constructor found for type [simple type, class com.amazon.ask.model.RequestEnvelope]: can not instantiate from JSON object (missing default constructor or creator, or perhaps need to add/enable type information?)\n at [Source: lambdainternal.util.NativeMemoryAsInputStream@543c6f6d; line: 1, column: 2]

No suitable constructor found for type [simple type, class com.amazon.ask.model.RequestEnvelope]: can not instantiate from JSON object (missing default constructor or creator, or perhaps need to add/enable type information?)\n at [Source: lambdainternal.util.NativeMemoryAsInputStream@543c6f6d; line: 1, column: 2]

Так что я думаю, что проблема в том, что нет способа проанализировать входной объект в объект RequestEnvelope из com.amazon.ask.model.RequestEnvelope.

Я также попробовал com.amazon.ask.dispatcher.request.handler.HandlerInput с тем же результатом.

Если я изменю

public class AWSLambdaLaunch implements RequestHandler<RequestEnvelope, ResponseEnvelope>

декларация с этим

public class AWSLambdaLaunch implements RequestHandler<Map<String, Object>, ResponseEnvelope>

Я не получаю ошибок, и все работает нормально, но я нахожу более «грязным» для извлечения элементов и значений из вложенных HashMaps

Поэтому мне интересно, есть ли способ напрямую проанализировать ввод в POJO или есть уже созданный POJO, который я могу использовать.

[edit] Вот код для RequestEnvelope класса из java aws sdk. Как отметил @ apandey846, в классе нет конструктора по умолчанию, так что, возможно, в этом проблема. Есть ли способ, которым я могу использовать это?

[edit] Я уже проверил, что полное имя класса для обработчика правильно настроено на вкладке конфигурации Lambda, как указано здесь alexa-java-sdk-issue-102 . Я думаю, что issue-104 - это еще одна проблема, на которую ссылается только из-за шаблона.

1 Ответ

0 голосов
/ 12 ноября 2018

Это была моя вина. Я перепутал документацию, поэтому я пробовал неправильный метод. Я следовал только за этим , и теперь я могу инициализировать Amazon POJO.

Подводя итог, я использовал лямбда-дескриптор вместо запроса скилла. com.amazon.ask.dispatcher.request.handler.HandlerInput

...