json - Spring RestTemplate 无法处理英镑符号
问题描述
我的 api 正在调用第三方 Web 服务,该服务返回一个字符串,如下所示:
{
"message": "You have £100 in your account"
}
当我在我的应用程序中记录响应时,响应记录如下:
{
"message": "You have £100 in your account"
}
我使用邮递员检查了第三方的响应,它正在发送正确的响应。所以,不知何故,我的 restTemplate 无法正确处理这个问题。我浏览了一些帖子并添加了StringHttpMessageConverter
withCharset.UTF_8
但也没有用。`
更新:
下面是一个代码片段:
public <T, S> ResponseEntity<S> send(HttpMethod method,
HttpHeaders headers,
T requestBody,
URI uri,
Class<S> responseClass)
throws IOException {
HttpEntity<T> httpEntity =
new HttpEntity<>(requestBody, headers);
restTemplate.getMessageConverters()
.add(0, new StringHttpMessageConverter(StandardCharsets.UTF_8));
log.info("Calling {} {} {}", method.toString(), uri.toString(), headers.toString());
log.info(mapper.writeValueAsString(requestBody));
try {
ResponseEntity<S> responseEntity =
restTemplate
.exchange(uri,
method,
httpEntity,
responseClass);
return responseEntity;
} catch (HttpStatusCodeException statusCodeException) {
log.info("-------------- " + statusCodeException.getResponseBodyAsString());
}
}
解决方案
将以下内容添加到您的应用程序配置中
http:
encoding:
force-request: true
force-response: true
charset: UTF-8
enabled: true
推荐阅读
- c# - 如何通过泛型使用嵌套类列表创建基类列表而不进行强制转换
- java - Web 浏览器的异常行为
- mysql - 如何创建 MySQL 视图
- apache-storm - 如何将延迟指标从 Apache Storm 发送到 Graphite 服务器?
- wso2 - 发布到网关生产和沙箱时发生错误
- oracle - 我写了这个,我的老师说“退出”有问题,但我不明白为什么
- spring-boot - 将 Spring Boot 应用程序部署在外部 tomcat 服务器上时,通过 application.properties 更改其端口
- asp.net-web-api2 - 将 Serilog 与 WebApi2 一起使用的正确方法
- c# - 如何在不删除空行的情况下删除重复字符串?C#
- python - 如何使用 pyclustering 实现 kmedoids?