通过Api网关和Java实现AWS SNS中的换行
我通过API网关触发AWS SNS通过Api网关和Java实现AWS SNS中的换行,java,amazon-web-services,amazon-sns,Java,Amazon Web Services,Amazon Sns,我通过API网关触发AWS SNS JSONObject requestBody = new JSONObject(); requestBody.put("phone_number", receiverNumber); requestBody.put("sender_id", senderAlias); requestBody.put("message_text", messageText); 此JSONObject作为ByteArr
JSONObject requestBody = new JSONObject();
requestBody.put("phone_number", receiverNumber);
requestBody.put("sender_id", senderAlias);
requestBody.put("message_text", messageText);
此JSONObject作为ByteArrayInputStream通过AWS SDK for Java v1发送到api网关。
文本中有“\n”用于创建换行符。但是,sms没有新行,它只是打印\n
在Api网关中,消息是这样提取的:method.request.body.message\u text
如何设置messageText变量以在SMS中打印新行?我尝试用\n或\\n或\\\\n替换它。。也尝试了ASCII,但没有成功
调用
由于这是一个相当复杂的程序,我不能全部显示。它通过Json格式的字符串触发,如下所示:
它必须是一个双后斜杠n,因为这正是代码所需要的。aws集成是一个额外的提供者,因此它必须适应现有的框架。json对象在执行之前看起来像这样。
所以我需要找到一种方法来操纵对象中的字符串。但我不知道怎么做
编辑3:
删除以前的编辑,因为它们没有帮助,也没有针对我现在知道的问题
最后结束这个问题。这是API网关中的一个问题。对象刚好到达网关,\n。这将在SNS服务中起作用。但要触发SNS服务,它将全部放入一个URL中,该URL将\n转换为%5Cn
转型前:
网址:
因此,问题在于URL编码。多亏了AWS的支持,我现在能够通过api网关发送带有换行符的SMS。 使用URL查询参数是错误的。我把它们都拿走了 我需要一个HTTP头: 内容类型:“application/x-www-form-urlencoded” 然后我使用了这样的消息传递模板,带有passthrough:Never:
#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对象,如下所示:
{
"phone_number": "+4912345678",
"message_text": "Break\nHere",
"sender_id":"Alias"
}
短消息中的换行符可以很好地工作您确定文本中有实际的换行符,而不是后跟n的斜杠吗?你能举个例子说明你是如何填写
消息文本的吗?(请不要评论有问题的代码)。当然,你是对的。“新行字符\n”具有误导性。只是,我问:那里的实际角色是什么?你是如何计算价值的?字符\u000a
或\u005C
后跟\u006E
是否为您编辑了答案。希望这有助于澄清。要求您在程序中打印变量messageText
的单个字符,并向我们展示它们是什么,这是否太过分了?不是JSON对象,不是您发送的消息,也不是您在该程序中用于填充消息的实际变量?字符的unicode值是多少?