当前位置: 首页 > 知识库问答 >
问题:

仓库bean未被实例化

咸浩初
2023-03-14

我有这个存储库接口

public interface ScoreCardRepository extends CrudRepository<ScoreCard, Long> {

    @Query(value = "SELECT SUM(SCORE) FROM SCORE_CARD WHERE USER_ID = :userId", nativeQuery = true)
    Integer getTotalScoreForUser(Long userId);
}

这个控制器:

@RestController
@RequestMapping("/gamification")
public class GamificationController {

    private final LeaderBoardServiceImpl leaderBoardService;

    private final GameServiceImpl gameService;

    @Autowired
    public GamificationController(GameServiceImpl gameService, LeaderBoardServiceImpl leaderBoardService){
        this.gameService = gameService;
        this.leaderBoardService = leaderBoardService;
    }

    @GetMapping("/retrieve-stats")
    ResponseEntity<GameStats> getUserStats(@RequestParam("user") String userId){
        return ResponseEntity.ok(gameService.retrieveStatsForUser(Long.parseLong(userId)));
    }

}

现在,当我调用<code>/retrieve stats</code>并进入<code>gameService时。retrieveStatsForUser我得到一个空指针异常

@Service
public class GameServiceImpl implements GameService {

    private final ScoreCardRepository scoreCardRepository;

    private final BadgeCardRepository badgeCardRepository;

    @Autowired
    public GameServiceImpl(ScoreCardRepository scoreCardRepository, BadgeCardRepository badgeCardRepository) {
        this.scoreCardRepository = scoreCardRepository;
        this.badgeCardRepository = badgeCardRepository;
    }

    @Override
    public GameStats retrieveStatsForUser(Long userId) {
        List<BadgeCard> badgeCardList = badgeCardRepository.findByUserIdOrderByBadgeTimestampDesc(userId);
--->>>  int totalScore = scoreCardRepository.getTotalScoreForUser(userId); //NULL POINTER EXCEPTION
        GameStats gameStats = new GameStats(userId, totalScore,
                badgeCardList.stream().map(BadgeCard::getBadge).collect(Collectors.toList()));
        return gameStats;
    }
}

这是否意味着scoreCardRepositorybean没有实例化?这应该发生在@AutowiredGamigrationserviceImpl构造函数中,对吗?badgeCardRepository很好地实例化了。发生了什么?

共有1个答案

弓温书
2023-03-14

我建议另一个原因:

Integer getTotalScoreForUser(Long userId);

此方法可以返回整数<code>null</code>,这会在自动装箱时导致NPE在

int totalScore = scoreCardRepository.getTotalScoreForUser(userId);
 类似资料:
  • 我正在做一个Dagger研究项目,我是基于我在git中发现的一些其他项目来做这个项目的,我在一个课上遇到了一个问题。 该项目是关于读取和提交git存储库的,它在不使用MVP和Dagger的情况下开始工作,但我正在重构它以使用这些特性。 RepositoriesPPreseInterimpl类扩展了BasePresenter,后者又有一个BaseView类型的视图(iRespositoriesPop

  • 本文向大家介绍Docker 私有仓库恢复实例详解,包括了Docker 私有仓库恢复实例详解的使用技巧和注意事项,需要的朋友参考一下 Docker 私有仓库恢复 之前openstack平台由于停电等影响,导致之前制作的registry 私有仓库的主机挂掉,还好数据挂载在nfs中,然后现在尝试重新启动恢复。 虚机安装nfs服务 apt-get install -y nfs-common 编辑 /etc

  • 在此任务中,我不允许使用自动布线

  • Repository,仓库,简称 Repo。为项目添加一个 Git 仓库以后,你就可以用 Git 为项目做版本控制了。 git init 上面的命令可以为项目初始化一个仓库,这个动作只需要执行一次,它会在项目下面创建一个 .git 目录,Git 会把它需要的东西存储在这个 .git 目录里面,它其实就是项目的仓库。 练习 1,创建一个项目。打开你的命令行界面,执行: cd ~/desktop m

  • 仓库(Repository),这里指的是可以使用包管理工具安装的软件包的列表。系统自带一些仓库,如果你发现要安装的包在这些仓库里不存在,你可能需要在系统上安装额外的仓库。 仓库列表 先查看一下安装在系统上的仓库列表,执行: yum repolist 返回类似的东西: repo id repo name

  • 镜像构建完成后,可以很容易的在当前宿主机上运行,但是,如果需要在其它服务器上使用这个镜像,我们就需要一个集中的存储、分发镜像的服务,Docker Registry 就是这样的服务。 一个 Docker Registry 中可以包含多个 仓库(Repository);每个仓库可以包含多个 标签(Tag);每个标签对应一个镜像。 通常,一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应该软件的