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

Spring Boot报错:找不到com.milkdairy.dao.UserRepository的可注入Bean如何解决

问题根源与修复方案

这个问题和你改用JSP没有关联,完全是后端配置错误、代码逻辑不匹配导致的,按以下步骤修复即可:

1. 修复UserRepository无法被Spring扫描的问题

你添加@Autowired注入UserRepository时启动报错,是因为Spring容器没有扫描到该Repository接口,无法创建对应的bean实例:

  • 检查启动类(标注@SpringBootApplication的类)的包路径,如果不在com.milkdairy根包下,需要添加扫描配置:
@SpringBootApplication
@EnableJpaRepositories(basePackages = "com.milkdairy.dao")
@EntityScan(basePackages = "com.milkdairy.entity")
public class MilkDairyApplication {
    public static void main(String[] args) {
        SpringApplication.run(MilkDairyApplication.class, args);
    }
}
  • 配置完成后,给ForgotController里的UserRepository添加@Autowired注解:
@Autowired
private UserRepository userRepository;

2. 修复UserRepository查询语句错误

你当前的JPQL查询存在两处不匹配:

  • User实体类的邮箱属性是email,不是userEmail
  • @Query中的占位符uEmail和@Param指定的参数名email不匹配
    修改后的UserRepository代码:
@Repository
public interface UserRepository extends JpaRepository<User, Long> {
    // 方式1:修正参数匹配
    @Query("from User where email=:email")
    public User getUserByUserName(@Param("email") String email);

    // 方式2:直接使用Spring Data JPA命名查询,无需手写JPQL
    // public User findByEmail(String email);
}

3. 修复OTP校验逻辑错误

你在send-otp接口中往session存入的OTP属性名是otp,但在校验时取的属性名是myotp,会导致OTP永远校验失败甚至空指针:
修改verifyOtp方法的取值逻辑:

// 原代码:int myOtp = (int) session.getAttribute("myotp");
int myOtp = (int) session.getAttribute("otp");

4. 其他小问题修复

校验OTP失败时返回的视图名是forgot/verify-otp(中划线),而生成OTP成功时返回的是forgot/verify_otp(下划线),保持视图名一致避免404。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 02:27:03