通过Java客户端发送POST请求的unicode数据会导致



我正在尝试通过spring引导应用程序中的java客户端调用SMS发送API。以下是我正在使用的代码。

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ඔබගේ පිවිසුම් හැඳුනුම්පත: XXnඔබගේ එක් වරක් පමණක් භාවිත කල හැකි මුරපද වෙනස් කිරීමේ කේතය:XX"}

我正在使用ipromo短信网关。

然而,我在短信中收到的内容是什么????字符而不是unicode字符。但是,当我使用Advanced Rest Client发送以下请求时,我会收到一条包含正确字符的消息。

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

问题似乎出在我使用的Java代码上。你知道我的代码出了什么问题吗?

在客户端代码中使用utf-8创建实体。

new StringEntity(requestBody, "utf-8")

相关内容

最新更新