首页 > 解决方案 > Spring RestTemplate 无法处理英镑符号

问题描述

我的 api 正在调用第三方 Web 服务,该服务返回一个字符串,如下所示:

{
"message": "You have £100 in your account"
}

当我在我的应用程序中记录响应时,响应记录如下:

{
"message": "You have £100 in your account"
}

我使用邮递员检查了第三方的响应,它正在发送正确的响应。所以,不知何故,我的 restTemplate 无法正确处理这个问题。我浏览了一些帖子并添加了StringHttpMessageConverterwithCharset.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());

    }
}

标签: jsonspring-bootresttemplate

解决方案


将以下内容添加到您的应用程序配置中

 http:
    encoding:
      force-request: true
      force-response: true
      charset: UTF-8
      enabled: true

推荐阅读