Java Spring RestTemplate getForObject 响应未正确解码

问题描述 投票:0回答:1

我正在尝试执行一个 HTTP GET 请求,我可以使用 RestTemplate 类在 Spring Boot 应用程序的 Postman 中正确执行该请求。

这是我用来发送请求的代码:

RestTemplate restTemplate = new RestTemplate();
String response = restTemplate.getForObject(url, String.class);

当我执行此操作时,响应变量仅包含奇怪的字符。 我最初的想法是我使用了错误的编码。 我在 Postman 中看到的响应表明正确的编码是 UTF-8,所以我添加了以下代码:

restTemplate.getMessageConverters().add(0, new StringHttpMessageConverter(StandardCharsets.UTF_8));

我也虽然使用了错误的“Accept”标头,所以我还添加了以下代码:

List<ClientHttpRequestInterceptor> interceptors = new ArrayList<>();
interceptors.add(new HeaderRequestInterceptor("Accept", MediaType.ALL_VALUE));
restTemplate.setInterceptors(interceptors);

这两项调整都不能解决问题。 有没有其他方法可以解决这个问题?

如果需要,我很乐意提供更多信息! 预先感谢。

spring-boot encoding resttemplate http-get spring-resttemplate
1个回答
0
投票

原因是响应大小对于我的 Spring 应用程序来说太大了。 我必须使用“ExchangeStrategies”的 WebClient 类:

int size = 100000 * 1024;
ExchangeStrategies strategies = ExchangeStrategies.builder()
            .codecs(codecs -> codecs.defaultCodecs().maxInMemorySize(size))
            .build();

我还必须在 application.yml 文件中设置此属性:

spring:
    codec:
       max-in-memory-size: 100MB

这两次调整解决了我的要求。

© www.soinside.com 2019 - 2024. All rights reserved.