API网关-主体映射模板-可选主体参数

Ros*_*ssP 2 post http-post amazon-web-services aws-lambda aws-api-gateway

我有一个POST API网关方法,我将向其中发送以下application / json主体,以将参数从其传递到该方法所连接的Lambda:

{ 
    "otherClientId": "12345",
    "message": "Text",
    "seconds": 0,
    "hours": 0
}
Run Code Online (Sandbox Code Playgroud)

我正在使用以下映射模板:

#set($inputRoot = $input.path('$'))
{
  "authorizedUser": "$context.authorizer.principalId",
  "otherClientId": "$inputRoot.otherClientId",
  "message": "$inputRoot.message",
  "amount": $inputRoot.amount,
  "duration": $inputRoot.duration
}
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是,我尝试发送没有数量或持续时间的请求时收到“错误字符串”错误。由于某些原因,这些参数似乎不是可选的(但我需要将它们设为!)。我能够错过其他参数,例如消息,但不能错过两个数字参数。

有人遇到过这种情况吗?或者有人可以指出我很可能会失踪的明显现象吗?AWS文档对此主题很少。

b.b*_*4rd 5

可能是因为没有传递这些参数,您的json请求看起来像这样:

#set($inputRoot = $input.path('$'))
{
  "authorizedUser": "$context.authorizer.principalId",
  "otherClientId": "$inputRoot.otherClientId",
  "message": "$inputRoot.message",
  "amount": ,
  "duration": 
}
Run Code Online (Sandbox Code Playgroud)

要解决这个简单的方法是包装$inputRoot.amount$inputRoot.duration引号:

#set($inputRoot = $input.path('$'))
{
   "authorizedUser": "$context.authorizer.principalId",
   "otherClientId": "$inputRoot.otherClientId",
   "message": "$inputRoot.message",
   "amount": "$inputRoot.amount",
   "duration": "$inputRoot.duration"
}
Run Code Online (Sandbox Code Playgroud)

或者,您可以使用if条件连接请求,例如:

#set($hasLimit = $input.params('limit') != "")
#set($hasOffset = $input.params('offset') != "")
#set($hasPeriod = $input.params('period') != "")
#set($hasType = $input.params('type') != "")
{
    "environment": "$input.params('environment')"
    #if($hasLimit),"limit": $input.params('limit')#end
    #if($hasOffset),"offset": $input.params('offset')#end
    #if($hasPeriod),"period": "$input.params('period')"#end
    #if($hasType),"type": "$input.params('type')"#end
}
Run Code Online (Sandbox Code Playgroud)