LambdaとAPI GatewayでAPIを作成していて、GETのパラメータがあったり無かったりする場合にマッピングテンプレートでどう対応するかのメモ。
探すのにだいぶ時間かかったので・・
以下のようなGETメソッドに対応したいのです。
https://www.example.com/api/hoge?user_id=abc
https://www.example.com/api/hoge?user_id=abc&limit=100
通常のマッピングテンプレートの指定方法
{
"user_id" : "$input.params('user_id')",
"limit" : "$input.params('limit')"
}
ですが、上記の書き方でlimitの引数を入れない状態でAPIをコールすると、以下のようなエラーが返却されます。
"errorMessage": "Unable to marshal response: ClientError('An error occurred (ValidationException) when calling the Query operation: The provided starting key is invalid: One or more parameter values were invalid: An AttributeValue may not contain an empty string') is not JSON serializable", "errorType"
解決方法
#set($limit = $input.params('limit'))
{
#if($limit && $limit.length() != 0)
"limit": "$input.params('limit')",
#end
"user_id" : "$input.params('user_id')"
}
参考