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

Spring Boot邮箱验证令牌存储遇空指针:confirmationTokenRepository为null

问题分析

报错Cannot invoke "com.marin.thrift.registration.token.ConfirmationTokenRepository.save(Object)" because "this.confirmationTokenRepository" is null的核心原因是**ConfirmationTokenService中的confirmationTokenRepository未被Spring正确注入**。

你在ConfirmationTokenService中同时添加了@AllArgsConstructor和@NoArgsConstructor:

  • @AllArgsConstructor会生成包含所有字段的构造器,这是Spring推荐的构造器注入方式
  • @NoArgsConstructor会生成无参构造器,Spring可能会优先使用无参构造器创建ConfirmationTokenService实例,导致依赖的confirmationTokenRepository没有被注入,最终为null
解决方案

直接删除ConfirmationTokenService中的@NoArgsConstructor注解,让Spring通过@AllArgsConstructor生成的带参构造器完成依赖注入:

修改后的ConfirmationTokenService.java:

import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service;

@Service
@AllArgsConstructor
public class ConfirmationTokenService {

    private ConfirmationTokenRepository confirmationTokenRepository;

    public void saveConfirmationToken(ConfirmationToken token) {
        confirmationTokenRepository.save(token);
    }
}
补充说明
  • Spring在管理Bean时,优先使用构造器注入(相比字段注入更安全,避免空指针),@AllArgsConstructor配合@Service可以让Spring自动识别并注入所有依赖的Bean
  • 如果你确实需要保留无参构造器,也可以给confirmationTokenRepository字段添加@Autowired注解,但这种字段注入方式不如构造器注入推荐

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 02:20:30