如何在AWS API Gateway映射模板中设置对象键值对
解决API Gateway映射模板添加字段的问题 + 替代方案分享
我太懂你这种烦躁了——AWS API Gateway的映射模板语法确实有点反人类,官方文档那叫一个晦涩,明明是很简单的需求,却要绕好几个弯。
先给你搞定添加timeReceived字段的正确方法
你之前的代码没生效,是因为没有先把原始的JSON请求体解析成可操作的对象,直接赋值当然没用。正确的完整映射模板应该是这样:
#set($bodyObj = $util.parseJson($input.json('$'))) #set($bodyObj.timeReceived = $context.requestTime) $util.toJson($bodyObj)
步骤拆解:
- 先用
$util.parseJson($input.json('$'))把请求体的JSON字符串转成Velocity可操作的对象 - 给这个对象添加
timeReceived字段,赋值为$context.requestTime - 最后用
$util.toJson()把修改后的对象转回JSON字符串作为输出
真心建议:考虑替换掉API Gateway的映射模板方案
我后来把整个应用改成了Edge Lambda + CloudFront的组合,体验提升不止一个档次,完全不用再跟这些别扭的映射模板语法较劲。
当然过程中也踩了个小坑:Edge Lambda没法直接用环境变量,导致自动注入DeliveryStreamName的过程有点麻烦,最后是用Sceptre的自定义解析器解决的,但整体来说这个方案在灵活性、可维护性上都甩API Gateway映射模板几条街。
内容的提问来源于stack exchange,提问作者TeemuK
相关产品推荐
相关产品推荐

