调用AWS Gateway API:SerializationException

时间:2018-10-08 12:29:48

标签: aws-api-gateway

人,

我正在调用AWS Api,但得到了

Endpoint response body before transformations: 
{"__type":"com.amazon.coral.service#SerializationException"}
Endpoint response body before transformations:
{
"__type": "com.amazon.coral.service#SerializationException"
}

在发布相同类型作业后出现错误。我已经启用了详细的Cloudwatch日志记录,但没有提供任何其他信息。而且,相关的API请求主体在转换之前和转换之后都会被截断。

是否还有其他日志选项需要测试?我想我只需要接受JSON中的原始API调用并从中删除字段,以查看导致其中断的原因?

2 个答案:

答案 0 :(得分:1)

我遇到了几乎相同的问题/异常错误:

我不确定您是否像我一样,在第一次遇到此问题时根本没有映射模板,但是提供一个帮助显然很明显-当然,它的详细信息为了最终解决此问题,需要满足您正在通过网关API的Integration Request访问的AWS服务的上下文! [正如您在自己的答案中根据您的情况提供的那样。]

如果您未提供映射模板,则实际上有一条日志语句(在com.amazon.coral.service#SerializationException之后),表明该情况:

Endpoint request body after transformations: 

看看那里没有尸体吗?如果没有映射模板,这似乎会发生,这是有道理的,因为映射模板将是正文内容的源(没有映射模板会导致那里没有请求正文)-例如,下面的映射模板JSON也最终会结束在使用该映射模板时与Endpoint request body after transformations完全相同(并且记录为例如完全相同的JSON)(而不是上面的log语句中没有要打印的正文)。

例如,在我的案例中,我的Integration Request是用于 DynamoDB GetItem 的(基本上是在此最新教程之后,它比我提供的详细信息/屏幕截图更多)在其他人中看到过:https://medium.com/@likhita507/using-api-gateway-to-get-data-from-dynamo-db-using-without-using-aws-lambda-e51434a4f5a0)。我的Integration Request的{​​{1}}映射模板以这种方式成功结束了(只是通过复合键的特定值/元组查询表)

application/json

[DynamoDB复合键是{<分区键>,}的元组对。在我的情况下,它们的名称分别为{ "TableName": "MyTableName", "Key": { "myPartitionKeyName": {"N" : "12345"}, "mySortKeyName": {"N" : "12345"} } } myPartitionKeyName,并且都是数字类型(是的,尽管此处的DynamoDB的mySortKeyName值仍为"12345",他们不是字符串)。]

无论如何...您可能需要确保至少提供 some 个映射模板(而不是没有)-以及它是一个足够(无论在您的上下文中是必需的)映射模板:)

答案 1 :(得分:0)

我终于通过在集成请求中提供以下映射模板来解决:

 #set($input = $input.json('$'))
  {
     "input": "$util.escapeJavaScript($input).replaceAll("\\'", "'")",
   "stateMachineArn": "arn:aws:states:xxxxxxxxxxx"
  }

有些讨厌的修复程序,但是它能起作用...