簡體   English   中英

調用 AWS 網關 API:com.amazon.coral.service#SerializationException

[英]Invoking AWS Gateway API: com.amazon.coral.service#SerializationException

呃,

我正在調用 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 並從中刪除字段以查看是什么導致它中斷?

我遇到了幾乎相同的問題/異常錯誤:

我不確定您是否像我一樣在第一次遇到問題時根本沒有映射模板,但提供一個顯然有幫助- 當然它的詳細信息需要滿足您通過網關 API 訪問的 AWS 服務的上下文Integration Request才能最終解決這個問題! [正如您在自己的答案中針對您的上下文所提供的那樣]。

如果您沒有提供映射模板,則實際上有一個日志語句(在com.amazon.coral.service#SerializationException之后不久)表明:

Endpoint request body after transformations: 

看到那里沒有列出屍體嗎? 這似乎是沒有映射模板時發生的,這是有道理的,因為映射模板將是正文的內容來源(沒有映射模板會導致沒有請求正文) - 例如,下面的映射模板 JSON 也結束了當使用該映射模板時, Endpoint request body after transformationsEndpoint request body after transformations完全相同(並且被記錄為完全相同的 JSON)(而不是像上面的日志語句那樣沒有要打印的正文)。

例如,在我的情況下,我的Integration Request是針對DynamoDB GetItem (基本上是按照最近的新教程進行的,它的詳細信息/屏幕截圖比我在其他教程中看到的要多: https : //medium.com/@likhita507/using -api-gateway-to-get-data-from-dynamo-db-using-without-using-aws-lambda-e51434a4f5a0 )。 我的Integration Requestapplication/json Mapping Template 像這樣成功結束(只是通過特定值/元組對其復合鍵的表查詢):

{
  "TableName": "MyTableName",
  "Key": {
      "myPartitionKeyName": {"N" : "12345"},
      "mySortKeyName": {"N" : "12345"}
  }
}

[DynamoDB 復合鍵是 {< 分區鍵 >, < sortKey >} 的元組對。 在我的情況下,它們的名稱為myPartitionKeyNamemySortKeyName ,它們都是數字類型(是的,它們的"12345"值在此處仍為 DynamoDB 使用"double-quoted" ,即使它們不是字符串)。]

無論如何......你可能需要確保你至少提供一些映射模板(而不是沒有) - 以及它是一個足夠的(無論你的上下文需要什么)映射模板:)

我在使用 VTL 映射模板直接與 DynamoDB 表集成的 API Gateway REST API 上收到此錯誤。 更改映射模板后開始出現錯誤。

HTTP/2 200

{"__type":"com.amazon.coral.service#SerializationException"}

在使用在線“ JSON 驗證器”工具檢查映射模板 JSON 后,我發現我的模板不是有效的 JSON。 (我在對象列表中有一個額外的,字符)。 修復模板使其成為有效的 JSON 修復了錯誤

我能夠讓它與

API 網關定義(Swagger):

requestTemplates:
                'application/json': '{"stateMachineArn":"YOUR_ARN","input":"$input.body"}'

POSt 請求正文(注意轉義引號。不是單引號):

{\"test\":\"test\"}

我最終通過在集成請求中提供以下映射模板來修復:

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

有點討厭的修復,但它奏效了......

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM