You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot中RestTemplate调用GET接口遇308重定向及消息转换器问题

解决RestTemplate调用接口遇到308 Permanent Redirect及消息转换错误问题

核心问题分析

  • RestTemplate默认不自动处理308永久重定向,而Postman会自动跟随重定向,这是本地调用和Postman结果不一致的根本原因。你拿到的text/html内容是nginx返回的重定向页面,并非目标接口的JSON响应。
  • 你添加MappingJackson2HttpMessageConverter处理text/html的操作方向错误:这个转换器用于解析JSON,无法处理HTML内容,反而会和默认的StringHttpMessageConverter冲突,导致String类型也无法正常解析。

解决步骤

1. 配置RestTemplate支持308重定向

RestTemplate默认的SimpleClientHttpRequestFactory不支持308重定向,需要改用HttpComponentsClientHttpRequestFactory,结合Apache HttpClient处理所有3xx重定向:

首先添加HttpClient依赖(Maven):

<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpclient</artifactId>
</dependency>

然后配置RestTemplate:

@Bean
public RestTemplate restTemplate() {
    // 创建HttpClient实例,启用全量重定向支持
    HttpClient httpClient = HttpClientBuilder.create()
            .setRedirectStrategy(new LaxRedirectStrategy()) // 支持所有3xx重定向,包括308、307
            .build();

    // 绑定HttpRequestFactory
    HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory(httpClient);

    // 初始化RestTemplate
    RestTemplate restTemplate = new RestTemplate(factory);

    return restTemplate;
}

LaxRedirectStrategy会自动跟随所有符合HTTP规范的重定向状态码,解决308无法跳转的问题。

2. 正常调用接口映射POJO

配置完成后,直接调用接口并指定你的POJO类型NetworksResponse即可:

ResponseEntity<NetworksResponse> response = restTemplate.getForEntity("http://xxxxxx/api/xx/xx", NetworksResponse.class);
NetworksResponse result = response.getBody();

此时RestTemplate会自动跟随308重定向,拿到目标接口返回的JSON响应,默认的Jackson转换器会自动完成JSON到POJO的映射,无需额外处理text/html类型。

关于之前转换器操作报错的原因

你添加的MappingJackson2HttpMessageConverter被设置为支持text/html,但它只能解析JSON格式内容,无法处理nginx返回的HTML重定向页面。同时RestTemplate默认的StringHttpMessageConverter也支持text/html,两个转换器同时尝试处理同一响应类型,导致解析逻辑冲突,最终出现字符串解析错误。

额外注意事项

  • 若重定向目标是HTTPS地址,需确保HttpClient配置了正确的SSL证书处理逻辑(自签名证书需额外配置信任策略)。
  • 检查POJO字段名、数据类型是否与JSON响应完全匹配,避免后续出现字段映射失败的问题。

内容的提问来源于stack exchange,提问作者spatil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 09:42:44