通过 Api 网关和 Java 在 AWS SNS 中换行
Linebreak in AWS SNS through Api Gateway and Java
我正在通过 API 网关触发 AWS SNS。
JSONObject requestBody = new JSONObject();
requestBody.put("phone_number", receiverNumber);
requestBody.put("sender_id", senderAlias);
requestBody.put("message_text", messageText);
此 JSONObject 作为 ByteArrayInputStream 通过 Java v1 的 AWS SDK 发送到 api 网关。
文本中有“\n”,用于创建换行符。然而,短信在那里没有新行,它只是打印 \n.
在 Api 网关中,消息是这样提取的:method.request.body.message_text
我必须如何设置 messageText 变量才能在 SMS 中打印新行?我尝试用 \n 或 \\n 或 \\\\n 替换它。也尝试了 ASCII,但没有用。
调用
由于这是一个相当复杂的程序,我无法展示所有内容。它是通过 Insomnia 使用 Json 格式的字符串触发的,如下所示:
它必须是双反斜杠 n,因为这正是代码所需要的。 aws 集成是一个额外的提供程序,因此它必须适合现有的框架。 json 对象在执行之前看起来像这样。
所以我需要找到一种方法来操纵对象中的字符串。但是我不知道怎么办。
编辑 3:
删除以前的编辑,因为它们没有帮助,也没有针对我现在所知道的问题。
终于关闭了这个问题。这是 API-Gateway 的问题。对象以 \n 顺利到达网关。这将在 SNS 服务中工作。但是为了触发 SNS 服务,它全部进入一个 URL,它将 \n 转换为 %5Cn
改造前:
URL:
所以问题出在URL编码中..
感谢 AWS 支持,我现在可以通过 api 网关发送带有换行符的 SMS。
使用 URL 查询参数是错误的。我全部删除了
我需要一个 HTTP Header:
Content-Type: 'application/x-www-form-urlencoded'
然后我使用了这样的消息传递模板,带有直通:从不:
#set($message = $input.path('$.message_text'))
#set($phoneNumber = $input.path('$.phone_number'))
Action=Publish&PhoneNumber=$util.urlEncode($phoneNumber)&Message=$util.urlEncode($message)&MessageAttributes.entry.1.Name=AWS.SNS.SMS.SenderID&MessageAttributes.entry.1.Value.DataType=String&MessageAttributes.entry.1.Value.StringValue=Alias
我的 JSON Object 在这样的请求中:
{
"phone_number": "+4912345678",
"message_text": "Break\nHere",
"sender_id":"Alias"
}
在 SMS 中使用换行符时效果很好
我正在通过 API 网关触发 AWS SNS。
JSONObject requestBody = new JSONObject();
requestBody.put("phone_number", receiverNumber);
requestBody.put("sender_id", senderAlias);
requestBody.put("message_text", messageText);
此 JSONObject 作为 ByteArrayInputStream 通过 Java v1 的 AWS SDK 发送到 api 网关。 文本中有“\n”,用于创建换行符。然而,短信在那里没有新行,它只是打印 \n.
在 Api 网关中,消息是这样提取的:method.request.body.message_text
我必须如何设置 messageText 变量才能在 SMS 中打印新行?我尝试用 \n 或 \\n 或 \\\\n 替换它。也尝试了 ASCII,但没有用。
调用
由于这是一个相当复杂的程序,我无法展示所有内容。它是通过 Insomnia 使用 Json 格式的字符串触发的,如下所示:
它必须是双反斜杠 n,因为这正是代码所需要的。 aws 集成是一个额外的提供程序,因此它必须适合现有的框架。 json 对象在执行之前看起来像这样。
所以我需要找到一种方法来操纵对象中的字符串。但是我不知道怎么办。
编辑 3: 删除以前的编辑,因为它们没有帮助,也没有针对我现在所知道的问题。
终于关闭了这个问题。这是 API-Gateway 的问题。对象以 \n 顺利到达网关。这将在 SNS 服务中工作。但是为了触发 SNS 服务,它全部进入一个 URL,它将 \n 转换为 %5Cn
改造前:
URL:
所以问题出在URL编码中..
感谢 AWS 支持,我现在可以通过 api 网关发送带有换行符的 SMS。 使用 URL 查询参数是错误的。我全部删除了
我需要一个 HTTP Header: Content-Type: 'application/x-www-form-urlencoded'
然后我使用了这样的消息传递模板,带有直通:从不:
#set($message = $input.path('$.message_text'))
#set($phoneNumber = $input.path('$.phone_number'))
Action=Publish&PhoneNumber=$util.urlEncode($phoneNumber)&Message=$util.urlEncode($message)&MessageAttributes.entry.1.Name=AWS.SNS.SMS.SenderID&MessageAttributes.entry.1.Value.DataType=String&MessageAttributes.entry.1.Value.StringValue=Alias
我的 JSON Object 在这样的请求中:
{
"phone_number": "+4912345678",
"message_text": "Break\nHere",
"sender_id":"Alias"
}
在 SMS 中使用换行符时效果很好