4

我正在爲我的項目使用數據提供程序,該程序不符合任何標準,因此在請求的標題中沒有指定任何內容類型。實際上它是指定的,但是具有不同的鍵然後是內容類型。用於映射模板的默認內容類型

POST請求的有效載荷是xml格式,所以據我所知我們需要使用映射模板將有效載荷包裝在json對象中。當我們將內容類型指定爲Integration Request部分中的設置類型之一時,所有這些工作都非常棒。

現在我的理解是否在請求頭中未指定content-type,那麼它應該默認爲'application/json'並執行與該類型關聯的映射模板。在我們的例子中,它的行爲就像忽略了映射模板,反過來導致返回以下錯誤:

{「Type」:「User」,「message」:「無法將請求正文解析爲json。」}

請注意,請求將發送給AWS Lambda進行處理。

任何想法,我們如何才能得到這個工作?

編輯:我已經確認,默認情況下是'application/json',如果Content-Type未設置在標題內。在這種情況下,我假設我遇到的是一個錯誤。

+0

如果默認的內容類型是application/json,是不是因爲網關*預期* JSON並拒絕請求,因爲那不是有效載荷是什麼? –

+1

是和不是。這與被調用的映射模板沒有關係,它只是指定應該調用哪一個。映射模板至少應該被調用。如果我明確地將Content-Type設置爲application/json,那麼將調用映射模板,並將xml內容很好地修剪成JSON對象,並且都很好。問題是,當缺少內容類型時,不會調用哪個應用程序是application/json。 AWS代表在其論壇上已經確認應該調用默認設置。看起來這可能是AWS中的一個錯誤。 – LemonMooseTom

+0

默認'Content-Type'可以是'*''。 – kixorz

回答

0

如果你不是過於依賴映射模板,你可以隨時使用拉姆達代理一體化,而不是:http://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-create-api-as-simple-proxy-for-lambda.html

這實際上將轉移解析身體恢復到您的lambda表達式的責任。您的event對象現在將包含一個body字符串 - 因此,不管標題如何,api-gw都會將身體傳遞給您的函數進行處理。即使內容類型標題丟失/無效,它也允許您將該正文解析爲XML。