#java #amazon-web-services #amazon-sns
#java #amazon-веб-сервисы #amazon-sns
Вопрос:
Я запускаю AWS SNS через шлюз API.
JSONObject requestBody = new JSONObject();
requestBody.put("phone_number", receiverNumber);
requestBody.put("sender_id", senderAlias);
requestBody.put("message_text", messageText);
Этот JSONObject отправляется на шлюз api в виде ByteArrayInputStream через AWS SDK для Java v1.
В тексте есть «n» для создания разрывов строк. Однако в sms нет новой строки, оно просто печатает n.
В шлюзе Api сообщение извлекается следующим образом: method.request.body.message_text
Как мне настроить переменную MessageText для печати новых строк в SMS? Я попытался заменить его на n или \n или \\n.. Также пробовал ASCII, не сработало.
Призыв
Поскольку это довольно сложная программа, я не могу показать все это. Он запускается через Insomnia с помощью строки в формате Json, подобной этой:
Это должно быть двойное отклонение n, потому что именно так и нужно коду. Интеграция с aws является дополнительным поставщиком, поэтому она должна соответствовать уже существующим фреймам. Объект json выглядит следующим образом перед выполнением.
Итак, мне нужно найти способ манипулировать строкой, которая входит в объект. Но я не знаю как.
ПРАВКА 3: удаление предыдущих правок, поскольку они не были полезными и не были нацелены на проблему, как я теперь знаю.
Наконец-то проблема решена. Это проблема в API-шлюзе. Объект достигает шлюза просто отлично, с помощью n. Который будет работать в службе SNS. Но для запуска службы SNS все это собирается в один URL, который преобразует n в n
Итак, проблема в кодировке URL..
Комментарии:
1. Вы уверены, что у вас есть настоящие новые строки в тексте, а не косые черты, за которыми следует n? Можете ли вы показать пример того, как вы заполняете
messageText
(код, о котором идет речь, пожалуйста, не комментируйте).2. Конечно, вы правы. «символы новой строки n» вводит в заблуждение. Это просто n
3. Опять же, я спрашиваю: какие там фактические символы? Как вы оцениваете это значение? За символом
u000a
илиu005C
следуетu006E
?4. Отредактировал ответ для вас. Надеюсь, это поможет прояснить ситуацию.
5. Не слишком ли много просить вас напечатать отдельные символы переменной
messageText
в вашей программе и показать нам, что это такое? Не объект JSON, не сообщение, которое вы отправляете в Insomnia, а фактическую переменную, которую вы используете в этой программе для заполнения сообщения? Каковы значения символов в Юникоде?
Ответ №1:
Благодаря поддержке AWS я теперь могу отправлять SMS с разрывами строк через API gateway. Неправильно использовать параметры запроса URL. Я удалил их все
Мне нужен был один HTTP-заголовок: Content-Type: ‘application /x-www-form-urlencoded’
Затем я использовал шаблон обмена сообщениями, подобный этому, с проходом: никогда:
#set($message = $input.path('$.message_text'))
#set($phoneNumber = $input.path('$.phone_number'))
Action=Publishamp;PhoneNumber=$util.urlEncode($phoneNumber)amp;Message=$util.urlEncode($message)amp;MessageAttributes.entry.1.Name=AWS.SNS.SMS.SenderIDamp;MessageAttributes.entry.1.Value.DataType=Stringamp;MessageAttributes.entry.1.Value.StringValue=Alias
Наличие моего объекта JSON в запросе, подобном этому:
{
"phone_number": " 4912345678",
"message_text": "BreaknHere",
"sender_id":"Alias"
}
Отлично работает с разрывом строки в SMS