在 Eclipse AWS SDK 中使用 Java8,我创建并上传了一个 lambda 函数,该函数在实现我的 lex 意图时挂钩。Lambda 接收 JSON 请求并解析没有问题。然后,我格式化一个简单的“关闭”dialogAction 响应并发送回 lex,并从 lex 控制台中的 Test Bot 页面收到以下错误:
An error has occurred: Received invalid response from Lambda:
Can not construct instance of IntentResponse:
no String-argument constructor/factory method to deserialize
from String value
('{"dialogAction
{"type":"Close","fulfillmentState":"Fulfilled","message":
{"contentType":"PlainText","content":"Thanks I got your info"}}}')
at [Source: "{\"dialogAction\":
{\"type\":\"Close\",\"fulfillmentState\":\"Fulfilled\",\"message\":
{\"contentType\":\"PlainText\",\"content\":\"Thanks I got your
info\"}}}";line: 1, column: 1]
格式(第 1 行,第 1 列)似乎马上就有问题,但我的 JSON 字符串看起来不错。在handleRequest java函数中返回输出字符串之前,我将它写入Cloudwatch日志,它写如下:
{
"dialogAction": {
"type": "Close",
"fulfillmentState": "Fulfilled",
"message": {
"contentType": "PlainText",
"content": "Thanks I got your info"
}
}
}
我尝试过的事情:
- 删除不需要的消息元素
- 添加非必需的属性,如 sessionAttributes、responseCard 等
- 删除双引号
- 用单引号替换双引号
- 从文档中的示例响应格式消息硬编码 json
是否在 http 标头级别隐藏了某些内容,或者 java8 是否对 JSON 执行了不可见的操作?