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

Spring Boot微服务调用出现NullPointerException问题求助

问题分析与解决方案

核心问题

报错明确指向UserRating.getUserRating()返回null,调用stream()方法时触发java.lang.NullPointerException。给Rating类添加无参构造无法解决问题,因为根源是UserRating的列表字段未初始化,或远程服务返回的响应未正确映射到该字段。

修复步骤

1. 初始化UserRating的列表字段

修改UserRating类,直接初始化列表字段,从根源避免null:

public class UserRating {
    private List<Rating> userRating = new ArrayList<>();

    public UserRating() {}

    public UserRating(List<Rating> userRating) {
        this.userRating = userRating;
    }

    public List<Rating> getUserRating() {
        return userRating;
    }

    public void setUserRating(List<Rating> userRating) {
        this.userRating = userRating;
    }
}

2. 校验远程服务响应格式

确保评分服务返回的JSON结构与UserRating类匹配,正确格式示例:

{
  "userRating": [
    {"movieId":"1","rating":4},
    {"movieId":"2","rating":3}
  ]
}

若远程服务直接返回列表(而非包裹在userRating字段的对象),需调整接收类型为List<Rating>,而非UserRating。

3. 添加空值防护逻辑

在调用远程服务后,增加空值检查,避免意外null导致报错:

// 调用评分服务
UserRating userRating = restTemplate.getForObject(
    "http://rating-service/ratings/users/{userId}", 
    UserRating.class, 
    userId
);

// 空值防护
if (userRating == null) {
    userRating = new UserRating();
}
if (userRating.getUserRating() == null) {
    userRating.setUserRating(new ArrayList<>());
}

// 安全执行流操作
List<CatalogItem> catalogItems = userRating.getUserRating().stream()
    .map(rating -> {
        Movie movie = restTemplate.getForObject(
            "http://movie-service/movies/{movieId}", 
            Movie.class, 
            rating.getMovieId()
        );
        return new CatalogItem(movie.getName(), movie.getDesc(), rating.getRating());
    })
    .collect(Collectors.toList());

4. 验证服务可用性

确认评分服务已正常启动,直接访问其接口(如http://localhost:端口/ratings/users/foo),检查返回的JSON结构正确且非空。

验证结果

修复后重启服务,访问http://localhost:8080/catalog/foo,应返回预期响应:

[{"name":"Test","desc":"TestDesc","rating":4},{"name":"Test","desc":"TestDesc","rating":3}]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 17:30:46