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

创建名为main Controller的bean时出错:通过字段userRepository表示的不满足的依赖项

荣德厚
2023-03-14

我有这个错误已经有好几个星期了,我不知道如何修复它。类似的堆栈溢出解决方案不适合我的项目。

我目前使用mysql数据库,但遇到这个问题,每当试图启动服务器: StackTrace

[错误]无法执行目标组织。springframework。boot:spring boot maven插件:1.5.6。发布:在project iPbackend上运行(默认cli):运行时发生异常。null:InvocationTargetException:创建名为“mainController”的bean时出错:通过字段“userRepository”表示的未满足的依赖关系;嵌套的异常是org。springframework。豆。工厂NoSuchBeanDefinitionException:没有“com”类型的合格bean。资源iPbackend。UserRepository’available:至少需要1个符合autowire候选资格的bean。依赖项注释:{@org.springframework.beans.factory.annotation.Autowired(必需=true)

我正在使用这个主控制器:主控制器。JAVA

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

import com.resource.iPbackend.UserRepository;
import com.resource.iPbackend.User;

@Controller
@RequestMapping(path = "/main")
public class MainController {

    @Autowired
    private UserRepository userRepository;

    @RequestMapping(path = "/reg", method = RequestMethod.POST)
    public @ResponseBody String regNewUser (@RequestParam String firstName,      @RequestParam String lastName, @RequestParam String email, @RequestParam String password, @RequestParam String username) {
        User n = new User();
        n.setFirstName(firstName);
        n.setLastName(lastName);
        n.setEmail(email);
        n.setPassword(password);
        n.setUsername(username);
        userRepository.save(n);
        return "User is stored in database: " + n;
    }

    @GetMapping(path = "/all")
    public @ResponseBody Iterable<User> getAllUsers() {
        return userRepository.findAll();
    }
}

与此存储库一起使用:UserRepository。JAVA

import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;
import com.resource.iPbackend.User;


@Repository
public interface UserRepository extends CrudRepository<User, Long> {

}

这个实体:User.java

import org.springframework.data.annotation.Id;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
@Entity
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Integer id;
    private String firstName;
    private String lastName;
    private String email;
    private String password;
    private String username;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    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 getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }
}

共有2个答案

厉永宁
2023-03-14

如果您使用的是Springboot(@SpringBootApplication),那么:

尝试相对于基本Springboot配置类将所有组件类移动到相同(或子)包中。

例如:

我在com包中配置了SpringBoot基本配置类。应用

我把UserRepository(你提到的)放在iPbackendcom.application.resource.包中。用户它为我工作,没有改变注释端的任何东西。我没有出错。

由于您尚未共享Springboot配置,所以我假设您将使用默认设置。如果解决方案不起作用,请分享您的spring boot配置,我可以在我这边尝试并响应。

希望这能有所帮助!

赵俊远
2023-03-14

您需要在基本配置类中包含注释@EnableJpaRepositories,以便Spring数据将扩展Crudepository的接口注册为Spring bean

另外,注释@Repository在接口上什么也不做,所以这是不需要的,但是它也不会因为在那里而破坏任何东西。

编辑:

您还可以尝试更具体地告诉@EnableJpaRepositories注释存储库的确切位置。即。:

@EnableJpaRepositories("com.resource.iPbackened")
 类似资料: