我在这里使用了这个很棒的资源--https://forums.aws.amazon.com/thread.jspa?messageid=673012--但是如果数据中有空字段(我会这样做,这超出了我的控制),它会抛出一个内部服务器错误。
然后从Christian E Willman-https://github.com/christianewillman/aws-api-gateway-bodyParser中搜索并实现了这个最新更新的库
## Parses x-www-urlencoded data to JSON for AWS' API Gateway
##
## Author: Christian E Willman <christian@willman.io>
#if ( $context.httpMethod == "POST" )
#set( $requestBody = $input.path('$') )
#else
#set( $requestBody = "" )
#end
#set( $keyValuePairs = $requestBody.split("&") )
#set( $params = [] )
## Filter empty key-value pairs
#foreach( $kvp in $keyValuePairs )
#set( $operands = $kvp.split("=") )
#if( $operands.size() == 1 || $operands.size() == 2 )
#set( $success = $params.add($operands) )
#end
#end
{
## add in the API stage data
"stage": "$context.stage",
#foreach( $param in $params )
#set( $key = $util.urlDecode($param[0]) )
#if( $param.size() > 1 )
#set( $value = $util.urlDecode($param[1]) )
#else
#set( $value = "" )
#end
"$key": "$value"#if( $foreach.hasNext ),#end
#end
}
编辑:这是我正在发送的数据:
WSO_SIGNATURE=1d9ce78c2778ecf795a93009a09f8102dd4ef38a&WP_BUYER_NAME=Neil+calabroso&WP_ITEM_NAME=Welcome+to+the+Vault&SHIPTONAME=Neil+calabroso&WSO_PRODUCT_ID=wp_product_3&WP_AFFID=&WSO_SALE_CURRENCY=USD&EMAIL=nn%2Bpaypal%40freelancer.com&WP_ITEM_NUMBER=wp_product_3&PAYMENTSTATUS=COMPLETED&WP_BUYER_EMAIL=nn%2Bpaypal%40freelancer.com&WSO_PRODUCT_NAME=Welcome+to+the+Vault&WP_SALEID=wp_sale_3&AMT=43&WSO_CUSTOMER_EMAIL=nn%2Bpaypal%40freelancer.com&WSO_SALE_ACTION=SALE&WP_SALE_AMOUNT=43&WSO_TXN_ID=35&saleid=wp_sale_3&WSO_AFF_AMOUNT=0.00&WP_ACTION=sale&WSO_IPN_VERSION=1&WP_TXNID=35&WSO_SALE_ID=wp_sale_3&payer_email=nn%2Bpaypal%40freelancer.com&WP_SALE_CURRENCY=USD&WSO_SALE_AMOUNT=43&WSO_AFF_EMAIL=&TRANSACTIONID=35&WSO_CUSTOMER_NAME=Neil+calabroso
预期的输出是一系列JSON键-值对:
{
"WSO_SIGNATURE": "1d9ce78c2778ecf795a93009a09f8102dd4ef38a",
"WP_BUYER_NAME": "Neil calabroso",
"WP_ITEM_NAME": "Welcome to the Vault",
"SHIPTONAME": "Neil calabroso",
"WSO_PRODUCT_ID": "wp_product_3",
"WP_AFFID": "",
"WSO_SALE_CURRENCY": "USD",
"EMAIL": "nn+paypal@freelancer.com",
"WP_ITEM_NUMBER": "wp_product_3",
"PAYMENTSTATUS": "COMPLETED",
"WP_BUYER_EMAIL": "nn+paypal@freelancer.com",
"WSO_PRODUCT_NAME": "Welcome to the Vault",
"WP_SALEID": "wp_sale_3",
"AMT": "43",
"WSO_CUSTOMER_EMAIL": "nn+paypal@freelancer.com",
"WSO_SALE_ACTION": "SALE",
"WP_SALE_AMOUNT": "43",
"WSO_TXN_ID": "35",
"saleid": "wp_sale_3",
"WSO_AFF_AMOUNT": "0.00",
"WP_ACTION": "sale",
"WSO_IPN_VERSION": "1",
"WP_TXNID": "35",
"WSO_SALE_ID": "wp_sale_3",
"payer_email": "nn+paypal@freelancer.com",
"WP_SALE_CURRENCY": "USD",
"WSO_SALE_AMOUNT": "43",
"WSO_AFF_EMAIL": "",
"TRANSACTIONID": "35",
"WSO_CUSTOMER_NAME": "Neil calabroso"
}
最后从@Marcus找到了这个映射模板--WhyBrow解决了这个问题--如何从Amazon API Gateway将参数从POST传递到AWS Lambda
{
#foreach( $token in $input.path('$').split('&') )
#set( $keyVal = $token.split('=') )
#set( $keyValSize = $keyVal.size() )
#if( $keyValSize >= 1 )
#set( $key = $util.urlDecode($keyVal[0]) )
#if( $keyValSize >= 2 )
#set( $val = $util.urlDecode($keyVal[1]) )
#else
#set( $val = '' )
#end
"$key": "$val"#if($foreach.hasNext),#end
#end
#end
}
我有一个Jersey 2.22 rest web服务,我的一个endpoint有以下签名: 我使用PostMan调用这个web服务,在post请求中不传递任何特定的头,我将“query”form param传递为“x-www-form-urlencoded”。 jersey应用程序由Tomcat 7托管,该Tomcat 7以JVM编码UTF-8文件启动。编码UTF-8,并将连接器的URIEncod
我正在尝试使用,但数据没有到达PHP。我认为这是因为当使用标题始终设置为
问题内容: 之间有什么区别 request.ContentType =“ application / json; charset = utf-8”; 和 webRequest.ContentType =“ application / x-www-form-urlencoded”; 问题答案: 第一种情况是告诉Web服务器您正在发布JSON数据,如下所示: 第二个选项是告诉Web服务器您将对URL中
我怎样才能实现下面的请求通过使用J汤? POST/login/user HTTP/1.1 主机:url。出版报纸。co.il 缓存控制:无缓存内容类型:应用程序/x-www-form-urlencoded 用户名=只读 我尝试了以下代码,但它不工作,我得到一个错误的网站 未收到预期的安全令牌 我正在使用以下代码: 我知道,当我使用时,我需要在URL中对其进行编码,但假设当我设置正确的头JSOUP时
我目前正在编写API以尝试获得代币。我快到了,但在最后一关跌倒了… 编码的令牌在第一部分返回正常,https请求尽管返回了问题。 我得到的响应是grant_type丢失,所以我知道由于这个x-www-form-urlencoded我有一个格式问题,但是我不知道如何修复它。 这是网站所说的: 您需要在请求正文中以 x-www-form-urlencode 格式包含以下数据: grant _ type
我有一根弦 我需要将其转换为x-www-form-urlencoded格式。 如果我使用在Java中,函数将字符串转换为 但当我以x-www-form-urlencoded的形式从邮递员那里发送请求时,得到的请求是 为什么会有这种差异?我还需要发送请求,因为它在postman中是完全相同的(第二个编码字符串),然后只有我得到了回复。如何将字符串编码为第二种格式?