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

使用Spring MVC Rest API获取数据时遇HttpMessageConverter匹配错误

问题分析与解决方案

核心问题

异常明确指出:没有合适的HttpMessageConverter能将text/html;charset=ISO-8859-1类型的响应转换为ResponseBean。这是因为Spring RestTemplate默认的JSON转换器(如MappingJackson2HttpMessageConverter)仅支持application/json等标准JSON媒体类型,无法处理HTML类型的响应。

可能的两种场景:

  1. 远程接口实际返回JSON数据,但错误设置了Content-Type为text/html;
  2. 远程接口返回的是HTML内容(比如错误页面、静态页面),但你期望将其转换为ResponseBean。

解决方案

场景1:远程接口返回JSON但Content-Type错误

修改RestTemplate配置,让JSON转换器支持text/html类型:

@Bean
public RestTemplate restTemplate() {
    RestTemplate restTemplate = new RestTemplate();
    
    // 获取已有的Jackson转换器,或新建一个
    MappingJackson2HttpMessageConverter jacksonConverter = new MappingJackson2HttpMessageConverter();
    // 添加text/html到支持的媒体类型列表
    jacksonConverter.getSupportedMediaTypes().add(MediaType.TEXT_HTML);
    
    // 将修改后的转换器加入RestTemplate
    restTemplate.getMessageConverters().add(jacksonConverter);
    return restTemplate;
}

场景2:远程接口确实返回HTML(如错误页面)

先捕获原始响应内容,判断是否为预期的JSON或错误页面:

  1. 修改SmeService的getSMEUser方法,先接收String类型响应:
public ResponseEntity<String> getSMEUser() {
    return restTemplate.exchange("远程接口URL", HttpMethod.GET, null, String.class);
}
  1. 在调用处判断返回内容:
if (isSME) {
    ResponseEntity<String> response = smeService.getSMEUser();
    String responseBody = response.getBody();
    // 判断是否为JSON格式,手动转换为ResponseBean
    if (isJson(responseBody)) {
        ObjectMapper objectMapper = new ObjectMapper();
        ResponseBean responseBean = objectMapper.readValue(responseBody, ResponseBean.class);
        // 后续逻辑
    } else {
        // 处理HTML错误页面的情况
        exceptionHandlerService.writeLog(new RuntimeException("远程接口返回非JSON响应:" + responseBody));
    }
}

其中isJson方法可以通过简单的格式判断实现(比如检查是否以{开头、}结尾)。

额外排查点

  • 检查远程接口是否正常:可能接口抛出异常,返回了Tomcat默认的错误HTML页面,而非预期的ResponseBeanJSON。可以通过Postman直接调用远程接口,查看实际返回内容和Content-Type。
  • 若远程接口是自己维护的,确保@ResponseBody注解生效,Spring能正确设置Content-Type: application/json。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 05:13:11