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

使用RestTemplate调用API报错:无适配HttpMessageConverter处理Array类型响应

解决RestTemplate调用API时UnknownContentTypeException异常

错误根源

你代码里使用Array.class作为getForObject的响应类型,这是java.lang.reflect.Array类,并非具体的数组类型(比如Rating[])。Spring的HttpMessageConverter无法将application/json类型的响应转换为这种反射类,因此抛出UnknownContentTypeException。

解决方案

1. 定义响应对应的实体类

首先创建与评分服务返回的JSON结构匹配的实体类,比如Rating:

public class Rating {
    private String id;
    private String userId;
    private String hotelId;
    private int rating;
    private String feedback;

    // 生成getter、setter、无参/全参构造方法
}

(根据实际JSON字段调整类的属性,字段名不匹配时可使用@JsonProperty注解映射)

2. 使用具体类型接收响应

有两种常用方式:

方式一:用具体数组类型接收

修改代码,将响应类型改为Rating[],同时注意动态拼接userId,不要写死固定值:

@Autowired
private RestTemplate restTemplate;

@Override
public User getUser(String userId) {
    User user = userRepository.findById(userId).orElseThrow(() -> new ResourceNotFoundException("User with give id is not found on server !! " + userId));
    String url = "http://localhost:8083/ratings/users/" + userId;
    Rating[] ratings = restTemplate.getForObject(url, Rating[].class);
    
    logger.info("Ratings: {}", Arrays.toString(ratings));
    // 可将评分列表设置到User对象中(需User类添加ratings属性)
    user.setRatings(Arrays.asList(ratings));
    return user;
}

方式二:用ParameterizedTypeReference接收List集合

如果更倾向于用List接收,使用restTemplate.exchange配合ParameterizedTypeReference:

@Autowired
private RestTemplate restTemplate;

@Override
public User getUser(String userId) {
    User user = userRepository.findById(userId).orElseThrow(() -> new ResourceNotFoundException("User with give id is not found on server !! " + userId));
    String url = "http://localhost:8083/ratings/users/" + userId;
    
    ResponseEntity<List<Rating>> response = restTemplate.exchange(
        url,
        HttpMethod.GET,
        null,
        new ParameterizedTypeReference<List<Rating>>() {}
    );
    List<Rating> ratings = response.getBody();
    
    logger.info("Ratings: {}", ratings);
    user.setRatings(ratings);
    return user;
}

3. 确保RestTemplate配置了JSON转换器

如果是手动创建RestTemplate Bean,需确保添加MappingJackson2HttpMessageConverter(Spring Boot自动配置的RestTemplate已默认包含):

@Bean
public RestTemplate restTemplate() {
    RestTemplate restTemplate = new RestTemplate();
    restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter());
    return restTemplate;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 16:32:44