java - 没有可用的“com.milkdairy.dao.userRepository”类型的合格 bean:预计至少有 1 个有资格作为自动装配候选者的 bean
问题描述
我是 Spring Boot 的新手,在编译代码时遇到了一些错误。请帮我解决错误。
我已经从 youtube 的视频中完成了这个忘记密码的实现。在那个视频中,他在 thymeleaf 中执行此操作,而我在 jsp 中执行此操作。如果这是问题,那么请告诉我在 jsp 中执行此操作的正确方法
案例:-我试图实现忘记密码的功能,但在执行此操作时出现此错误
首先,这是我得到的错误
错误日志:
at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1353)
at java.lang.Thread.run(Thread.java:748)
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.milkdairy.dao.UserRepository' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {}
at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoMatchingBeanFound(DefaultListableBeanFactory.java:1504)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1101)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1062)
at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:815)
at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:721)
... 30 more
Sep 14, 2021 4:05:28 PM org.apache.catalina.core.StandardContext loadOnStartup
SEVERE: Servlet [dispatcher] in web application [/spring-crud-rest-api] threw load() exception
org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.milkdairy.dao.UserRepository' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {}
at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoMatchingBeanFound(DefaultListableBeanFactory.java:1504)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1101)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1062)
at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:815)
at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:721)
at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:192)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1270)
org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.milkdairy.dao.UserRepository' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {}
at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:729)
at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:192)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1270)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1127)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:545)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:502)
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:312)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:310)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:758)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:868)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:549)
at org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext(FrameworkServlet.java:676)
at org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:545)
...
当我将@Autowired 放入userRepository 时,应用程序在启动时崩溃,当我删除@Autowired 时,当我单击验证时出现错误
忘记控制器.java:
@Controller
public class ForgotController {
@Autowired
private EmailService emailService;
private UserRepository userRepository;
int min = 1001;
int max = 9999;
@RequestMapping("/forgot")
public String openEmailForm() {
return "forgot/forgot_email_form";
}
@PostMapping("/send-otp")
public String SendOTP(@RequestParam("email") String email, HttpSession session) {
int otp = (int) (Math.random() * (max - min + 1) + min);
System.out.println(otp);
String subject = "OTP FROM Milk Dairy";
String message = "" + "<div style='border:1px solid #e2e2e2; padding:20px;'>" + "<h1>" + "Otp is " + "<b>" + otp
+ "</n>" + "</h1>" + "</div>";
String to = email;
boolean flag = this.emailService.sendEmail(subject, message, to);
if (flag) {
session.setAttribute("otp", otp);
session.setAttribute("email", email);
return "forgot/verify_otp";
} else {
session.setAttribute("message", "Check your email id !!");
return "forgot/forgot_email_form";
}
}
@PostMapping("/verify-otp")
public String verifyOtp(@RequestParam("otp") int otp, HttpSession session) {
int myOtp = (int) session.getAttribute("myotp");
String email = (String) session.getAttribute("email");
if (myOtp == otp) {
User user = this.userRepository.getUserByUserName(email);
if (user == null) {
session.setAttribute("message", "User does not existt with this email");
return "forgot/forgot_email_form";
} else {
return "forgot/password_change_form";
}
} else {
session.setAttribute("message", "You have entered wrong otp");
return "forgot/verify-otp";
}
}
}
用户存储库.java:
package com.milkdairy.dao;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;
import com.milkdairy.entity.User;
@Repository
public interface UserRepository extends JpaRepository<User, Long> {
@Query("from User where userEmail=:uEmail")
public User getUserByUserName(@Param("email") String email);
}
用户.java:
package com.milkdairy.entity;
import javax.persistence.*;
import java.util.Collection;
@Entity
@Table(name = "user")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Long id;
@Column(name = "username")
private String userName;
@Column(name = "password")
private String password;
@Column(name = "first_name")
private String firstName;
@Column(name = "last_name")
private String lastName;
@Column(name = "phone_no")
private String phoneNo;
@Column(name = "email")
private String email;
@ManyToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinTable(name = "users_roles",
joinColumns = @JoinColumn(name = "user_id"),
inverseJoinColumns = @JoinColumn(name = "role_id"))
private Collection<Role> roles;
public User() {
}
public User(String userName, String password, String firstName, String lastName, String phoneNo, String email) {
this.userName = userName;
this.password = password;
this.firstName = firstName;
this.lastName = lastName;
this.phoneNo = phoneNo;
this.email = email;
}
public User(String userName, String password, String firstName, String lastName, String phoneNo, String email,
Collection<Role> roles) {
this.userName = userName;
this.password = password;
this.firstName = firstName;
this.lastName = lastName;
this.phoneNo = phoneNo;
this.email = email;
this.roles = roles;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getPhoneNo() {
return phoneNo;
}
public void setPhoneNo(String phoneNo) {
this.phoneNo = phoneNo;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public Collection<Role> getRoles() {
return roles;
}
public void setRoles(Collection<Role> roles) {
this.roles = roles;
}
@Override
public String toString() {
return "User [id=" + id + ", userName=" + userName + ", password=" + password + ", firstName=" + firstName
+ ", lastName=" + lastName + ", phoneNo=" + phoneNo + ", email=" + email + ", roles=" + roles + "]";
}
}
一切正常,但是当我放置 otp 并单击验证时,我收到错误
我错过了什么?
如果我做错了什么,请告诉我..
先感谢您!
解决方案
推荐阅读
- ios - 如何在 ios 上运行 ionic cordova live-reload
- reactjs - 如何在反应中替换 Glyphicon 标签
- android - Android警报管理器不工作,而应用程序被最近的应用程序杀死
- r - 如何使用 R 生成像数据透视表一样的输出
- laravel - 上传图片 Laravel
- excel - 如何在类模块中为 TextBox 使用 After_Update?
- mysql - 获取每月从 MySQL 下订单的用户
- html - 将按钮添加到百里香叶表
- android - 为custome xml按钮着色时出现问题
- java - 如何使 GSON 在未知属性上失败