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

调用API时出现“Could not find acceptable representation”错误如何解决?

解决RestTemplate调用出现406 Not Acceptable错误的方法

错误原因分析

406 Not Acceptable错误表示服务器无法返回客户端请求中指定的媒体类型,或者客户端发送的Accept请求头与服务器支持的响应格式不匹配,导致服务器找不到合适的响应表示。

具体解决步骤

1. 明确设置请求的Accept头为application/json

RestTemplate的getForEntity方法默认的Accept头可能包含多种媒体类型(如application/json、application/xml等),如果服务器对这些类型的支持有冲突,就会触发406错误。需要显式指定只接受JSON格式:

// 创建请求头,设置Accept为application/json
HttpHeaders headers = new HttpHeaders();
headers.setAccept(Collections.singletonList(MediaType.APPLICATION_JSON));
HttpEntity<String> requestEntity = new HttpEntity<>(headers);

// 使用exchange方法发送请求,替代getForEntity
ResponseEntity<ApiResponse> apiResponse = restTemplate.exchange(
    url, 
    HttpMethod.GET, 
    requestEntity, 
    ApiResponse.class
);

2. 确保RestTemplate配置了Jackson JSON消息转换器

如果RestTemplate没有正确配置MappingJackson2HttpMessageConverter,Spring无法正确处理JSON的序列化/反序列化,也可能导致媒体类型匹配失败。可以通过配置Bean来添加转换器:

@Bean
public RestTemplate restTemplate() {
    RestTemplate restTemplate = new RestTemplate();
    
    // 创建并配置Jackson消息转换器
    MappingJackson2HttpMessageConverter jsonConverter = new MappingJackson2HttpMessageConverter();
    jsonConverter.setSupportedMediaTypes(Collections.singletonList(MediaType.APPLICATION_JSON));
    
    // 添加到RestTemplate的消息转换器列表
    restTemplate.getMessageConverters().add(jsonConverter);
    return restTemplate;
}

3. 验证服务器端的响应格式

用Postman或curl调用目标URL,检查响应的Content-Type头是否为application/json:

  • 如果服务器返回的是其他格式(如text/html),需要确认服务器是否支持JSON响应,或者调整请求参数让服务器返回JSON。

4. 检查POJO的JSON映射正确性

虽然406错误不是映射失败直接导致,但确保POJO的注解正确可以避免后续解析问题:

  • 确认@JsonProperty的字符串与JSON响应中的键完全匹配(包括特殊字符{{}},Java字符串中无需转义这些符号);
  • 确保所有需要映射的字段都有对应的@JsonProperty注解,且@JsonIgnoreProperties(ignoreUnknown = true)已正确添加,忽略不需要的字段。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 05:32:33