【问题标题】:Parsing the input in a AWS Lambda handleRequest into a POJO将 AWS Lambda handleRequest 中的输入解析为 POJO
【发布时间】:2019-04-14 15:07:18
【问题描述】:

我正在开发一项 Alexa 技能,但在解析输入事件时,我在 Lambda(用 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]

所以我认为问题是没有办法将输入对象解析为来自 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>

我没有收到任何错误,它工作正常,但我发现从嵌套的 HashMap 中检索元素和值更“脏”

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

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

[编辑] 我已经检查了处理程序的完全限定类名称在 Lambda 配置选项卡中是否正确配置,如alexa-java-sdk-issue-102 所述。我认为issue-104 是关于另一个问题,但只是因为模板而被引用。

【问题讨论】:

  • 你能把RequestEnvelope的代码贴出来吗?
  • 只需检查您的RequestEnvelope class 是否缺少默认构造函数,然后添加一个并尝试您的错误是否消失。
  • @usuario,你检查过类似的alexa-java-sdk-issue-102issue-104 似乎是设置问题。

标签: java aws-lambda aws-sdk alexa


【解决方案1】:

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

总而言之,我使用的是 lambda 句柄请求而不是技能句柄。 com.amazon.ask.dispatcher.request.handler.HandlerInput

【讨论】:

    猜你喜欢
    • 2020-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-23
    • 2013-02-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多