【发布时间】: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-102 和issue-104 似乎是设置问题。
标签: java aws-lambda aws-sdk alexa