Отправка данных Unicode для запроса POST через Java клиента приводит к? - PullRequest
2 голосов
/ 01 августа 2020

Я пытаюсь вызвать API отправки SMS через клиент java в моем приложении весенней загрузки. Ниже приведен код, который я использую.

HashMap<String, String> requestParameters = new HashMap<>();
requestParameters.put("user_name", env.getProperty(GlobalConstants.SMSConstants.IPROMO_USERNAME));
requestParameters.put("api_key", appCtx.getBean(PropertyServiceForJasyptSimple.class).getIpromoKey());
requestParameters.put("gateway_type", GlobalConstants.SMSConstants.IPROMO_ECONOMY_GATEWAY_ID);
requestParameters.put("country_code", GlobalConstants.SMSConstants.SL_COUNTRY_CODE);
requestParameters.put("number", phoneNumber.substring(1));

String message = String.format(msgSource.getMessage(GlobalConstants.SMSConstants.SMS_PASSWORD_RECOVERY_MSG,
        new Object[]{}, LocaleContextHolder.getLocale()), loginId, recoveryCode);
requestParameters.put("message", message);

try {
    ObjectMapper mapper = new ObjectMapper();
    String requestBody = mapper.writeValueAsString(requestParameters);
    CloseableHttpClient client = HttpClientBuilder.create().build();
    HttpPost request = new HttpPost(GlobalConstants.SMSConstants.IPROMO_ENDPOINT);
    request.setEntity(new StringEntity(requestBody));
    HttpResponse response = client.execute(request);
    System.out.println(requestBody);
    System.out.println(request);
} catch (IOException e) {
    e.printStackTrace();
}

Ниже приведен образец тела запроса, который я вижу в своем заявлении на печать.

{"country_code":"+94","number":"XXX","api_key":"XXX","user_name":"XXX","gateway_type":"1","message":"හිතවත් වරණ පරිශීලකය,\nඔබගේ පිවිසුම් හැඳුනුම්පත: XX\nඔබගේ එක් වරක් පමණක් භාවිත කල හැකි මුරපද වෙනස් කිරීමේ කේතය:XX"}

Я использую ipromo sms gateway .

Однако то, что я получаю в SMS, показывает ???? символы вместо символов Юникода. Однако, когда я отправляю следующий запрос с помощью Advanced Rest Client, я получаю сообщение с правильными символами.

{
  "user_name": "XXX",
  "api_key": "XXXX",
  "gateway_type": "1",
  "country_code": "94",
  "number": "XXXX",
  "message": "විතවත් වරණ පරිශීලකය,ඔබගේ පිවිසුම් හැඳුනුම්පත: XXඔබගේ එක් වරක් පමණක් භාවිත කල හැකි මුරපද වෙනස් කිරීමේ කේතය:XX"
  }

Похоже, проблема связана с кодом Java, который я использую. Есть идеи, что не так с моим кодом?

1 Ответ

1 голос
/ 01 августа 2020

Создайте свою сущность с utf-8 в коде клиента.

new StringEntity(requestBody, "utf-8")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...