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
相关产品推荐
相关产品推荐

