【发布时间】:2020-09-08 12:55:50
【问题描述】:
我正在通过 API Gateway 触发 AWS SNS。
JSONObject requestBody = new JSONObject();
requestBody.put("phone_number", receiverNumber);
requestBody.put("sender_id", senderAlias);
requestBody.put("message_text", messageText);
此 JSONObject 正在通过 AWS SDK for Java v1 作为 ByteArrayInputStream 发送到 api 网关。 文本中有“\n”,用于创建换行符。然而,短信在那里没有新行,它只是打印\n。
在 Api Gateway 中,消息是这样提取的:method.request.body.message_text
如何设置 messageText 变量以在 SMS 中打印新行?我尝试将其替换为 \n 或 \\n 或 \\\\n.. 也尝试了 ASCII,但不起作用。
调用
由于这是一个相当复杂的程序,我无法全部展示。它是通过 Insomnia 使用 Json 格式的字符串触发的,如下所示:
它必须是双反斜线 n,因为这正是代码需要它的方式。 aws 集成是一个额外的提供程序,因此它必须适合现有的框架。 json 对象在执行之前看起来像这样。
所以我需要找到一种方法来操作对象中的字符串。但我不知道怎么做。
编辑 3: 删除以前的编辑,因为它们没有帮助,也没有针对我现在知道的问题。
终于解决了这个问题。这是 API 网关中的一个问题。对象可以很好地到达网关,带有 \n。这将在 SNS 服务中工作。但是要触发 SNS 服务,它全部进入一个 URL,它将 \n 转换为 %5Cn
所以问题出在 URL 编码中..
【问题讨论】:
-
您确定文本中有实际的换行符,而不是后跟 n 的大斜杠吗?你能举例说明你如何填写
messageText(有问题的代码,请不要评论)。 -
当然,你是对的。 “换行符\n”具有误导性。只是\n
-
再次,我问:那里的实际字符是什么?你如何把价值放进去?字符是
\u000a还是\u005C后跟\u006E? -
为您编辑了答案。希望这有助于澄清。
-
要求您在程序中打印变量
messageText的各个字符并向我们展示它们是什么是不是太过分了?不是 JSON 对象,不是您在 Insomnia 中发送的消息,不是您在该程序中用于填充消息的实际变量?字符的 unicode 值是多少?
标签: java amazon-web-services amazon-sns