将 AWS Lambda handleRequest 中的输入解析为 POJO

Parsing the input in a AWS Lambda handleRequest into a POJO

我正在开发 Alexa Skill,在解析输入事件时,我在 Lambda(写在Java)中遇到了一些问题。

我的兰巴class是这样的

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]

所以我认为问题是无法将输入对象解析为来自 com.amazon.ask.model.RequestEnvelope 的 RequestEnvelope 对象。

我也试过 com.amazon.ask.dispatcher.request.handler.HandlerInput 结果相同。

如果我改变

public class AWSLambdaLaunch implements RequestHandler<RequestEnvelope, ResponseEnvelope>

用这个声明

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

我没有收到任何错误并且工作正常,但我发现它更多 "dirty" 从嵌套的 HashMaps

中检索元素和值

所以我想知道是否有一种方法可以直接将输入解析为 POJO,或者是否有我可以使用的已经构建的 POJO。

[edit] 这是来自 java aws sdk 的 RequestEnvelope class 的代码。正如 @apandey846 所指出的,class 中没有默认构造函数,所以这可能就是问题所在。有什么办法可以使用吗?

[edit] 我已经检查过在 Lambda 配置选项卡中正确配置了处理程序的完全限定 class 名称,如此处所述 alexa-java-sdk-issue-102. I think issue-104 是关于另一个问题,但只是因为模板。

都是我的错。我一直在混淆文档,所以我尝试了错误的方法。我只关注了this,现在我可以初始化一个Amazon POJO了。

总而言之,我使用的是 lambda handlerequest 而不是 skill handle。 com.amazon.ask.dispatcher.request.handler.HandlerInput