【问题标题】:Maapping template default to None if no input from user如果没有用户输入,映射模板默认为 None
【发布时间】:2023-01-19 08:54:57
【问题描述】:

我在 lambda 集成映射模板中有一个与 lambda 集成的 API GET 方法。

映射模板:

{
    "name" : "$input.params('name')",
    "std_out" : "$input.params('std_out')" 
}

条件是将 std_out 默认值设置为无,但如果用户在 std_out 中发送某些内容,则用户值将分配给它。 我不知道如何使 std_out 默认为无,但如果用户通过任何输入,我仍然接受输入。我尝试过的事情:

  1. 我认为的一种方法是不使用 GET,而是使用 POST 方法,并且不使用任何映射模板。但这不是标准方式。
  2. 如果不传递任何值,我可以要求用户发送 None,但仍在探索我是否可以在我的级别上做一些事情来减少用户的开销。 那么有没有使用 GET 方法的解决方案。

【问题讨论】:

  • 在输入中使用一个函数,这样你就可以检查输入值,如果不符合标准,你可以返回 None 。
  • @bonifacio_kid 输入函数?我不明白该怎么做?

标签: python amazon-web-services aws-lambda aws-api-gateway


【解决方案1】:

虽然 VTL variables 似乎允许备用值为空时,显然 API 网关不支持该值并且无法转换请求。

下一个最佳选择是使用内联 if/else 条件来执行相同的操作:

## setting to a variable for readability, but not strictly necessary
#set( $std_out = $input.params('std_out') )
{
    "name" : "$input.params('name')",
    "std_out": #if( $std_out != '' )"$std_out"#{else}"None"#end
}

如果你想在用户没有传递该字段的情况下跳过它,请将整个字段包装在 if/else 中:

{
## putting before 'name' so we don't have to deal with the comma there
#if( $input.params('std_out') != '' )
    "std_out": "$input.params('std_out')",
#end
    "name" : "$input.params('name')"
}

【讨论】:

    猜你喜欢
    • 2015-12-28
    • 2012-08-21
    • 2013-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多