首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Apache速度模板语言(VTL):处理冒号

Apache速度模板语言(VTL):处理冒号
EN

Stack Overflow用户
提问于 2019-11-17 17:29:13
回答 2查看 924关注 0票数 0

我的设置是一个AWS函数,接收来自API的POST数据。当我向我的Twilio号码发送一条WhatsApp消息时,就会从Twilio发送web钩子。

有人能向我解释一下这里发生了什么吗?是否有办法避免将冒号转换为%3A%2B。或者,这是我必须在更深层次上做的事情吗?

AWS网关,集成请求-映射模板

代码语言:javascript
复制
  #set($httpPost = $input.path('$').split("&"))
    {
    #foreach( $kvPair in $httpPost )
     #set($kvTokenised = $kvPair.split("="))
     #if( $kvTokenised.size() > 1 )
       "$kvTokenised[0]" : "$kvTokenised[1]"#if( $foreach.hasNext ),#end
     #else
       "$kvTokenised[0]" : ""#if( $foreach.hasNext ),#end
     #end
    #end
    }

AWS函数

代码语言:javascript
复制
def lambda_handler(event, context):
    print("Received event: " + str(event))
    print("Received Body: " + str(event.get('Body')))
    return 200
    # return '<?xml version=\"1.0\" encoding=\"UTF-8\"?>'\
    #       '<Response><Message>Hello world! -Lambda</Message></Response>'

印在我的控制台上。whatsapp%3A%2B491573599343应该是whatsapp:491573599343

代码语言:javascript
复制
Received event: {'SmsMessageSid': 'SM851aa11c912d3775d7941143d8b935f9', 'NumMedia': '0', 'SmsSid': 'SM851aa11c912d3775d7941143d8b935f9', 'SmsStatus': 'received', 'Body': 'Hi', 'To': 'whatsapp%3A%2B4915735992273', 'NumSegments': '1', 'MessageSid': 'SM851aa11c912d3775d7941143d8b935f9', 'AccountSid': 'AC358aa1d18557365a9e1f5e2ffcbcebe0', 'From': 'whatsapp%3A%2B49160343202', 'ApiVersion': '2010-04-01'}

更新:

代码语言:javascript
复制
#set($httpPost = $input.path('$').split("&"))
{
#foreach( $kvPair in $httpPost )
 #set($kvTokenised = $kvPair.split("="))
 #if( $kvTokenised.size() > 1 )
   "$kvTokenised[0]" : "$esc.unurl($kvTokenised[1])"#if( $foreach.hasNext ),#end
 #else
   "$kvTokenised[0]" : ""#if( $foreach.hasNext ),#end
 #end
#end
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-11-17 17:54:16

你想要的基本上是未转义的url编码字符。你可以通过两种方式实现这一点:

  1. 使用速度的EscapeTool (https://velocity.apache.org/tools/devel/apidocs/org/apache/velocity/tools/generic/EscapeTool.html)解除映射模板本身中的参数。所以您的代码现在看起来如下所示:

"$kvTokenised[0]" : "$esc.unurl($kvTokenised[1]"

  1. 在AWS Lambda函数中像这样处理它(python):

urllib.parse.unquote(str(event))

票数 1
EN

Stack Overflow用户

发布于 2019-11-17 17:48:51

实际上,这与VTL无关,而是与URL解码有关。

在Python中,您可以使用3+包提供的取消报价()函数对任何字符串进行取消报价()解码。函数默认使用UTF-8编码。

因此,在您的例子中,您可以在lambda函数中这样做:

代码语言:javascript
复制
>>> import urllib.parse
>>> encodedStr = 'whatsapp%3A%2B491573599343'
>>> urllib.parse.unquote(encodedStr)
'whatsapp:+491573599343'

您可以在这里找到一篇好文章:https://www.urldecoder.io/python/

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58903203

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档