我正在开发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>
我没有任何错误,并且可以正常工作,但是我发现它更“脏”,无法从嵌套的HashMaps中检索元素和值
所以我想知道是否有一种方法可以直接将输入解析为POJO,或者已经可以使用的POJO。
[edit]这是来自Java aws sdk的RequestEnvelope类的代码。正如@ apandey846指出的那样,该类中没有默认的构造函数,所以也许就是问题所在。有什么我可以使用的方式吗?
[edit]我已经检查了Lambda配置选项卡中是否正确配置了处理程序的完全限定类名,如此处alexa-java-sdk-issue-102所述。我认为issue-104与另一个问题有关,只是因为模板而被引用。
答案 0 :(得分:0)
这都是我的错。我一直在混淆文档,所以尝试了错误的方法。我只关注了this,现在可以初始化Amazon POJO。
总而言之,我使用的是lambda handlerequest而不是Skill handle。 com.amazon.ask.dispatcher.request.handler.HandlerInput