创建名为'mainController'的bean时出错:通过字段'userRepository'

时间:2017-08-15 22:31:56

标签: java mysql spring hibernate spring-mvc

我现在有几个星期的错误,我不知道如何修复它。 Stack Overflow上的类似解决方案不适合我的项目。

我目前正在使用mysql数据库,但在尝试启动服务器时遇到此问题: StackTrace

  

[错误]无法执行目标org.springframework.boot:spring-boot-maven-plugin:1.5.6.RELEASE:在项目iPbackend上运行(default-cli):运行时发生异常。 null:InvocationTargetException:创建名为'mainController'的bean时出错:通过字段'userRepository'表示的不满意的依赖关系;嵌套异常是org.springframework.beans.factory.NoSuchBeanDefinitionException:没有'com.resource.iPbackend.UserRepository'类型的限定bean可用:预期至少有1个bean有资格作为autowire候选者。依赖注释:{@ org.springframework.beans.factory.annotation.Autowired(required = true)

我正在使用这个mainController: 的 MainController.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 个答案:

答案 0 :(得分:0)

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

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

编辑:

您还可以通过将@EnableJpaRepositories注释准确地告知存储库的位置来尝试更具体。即:

@EnableJpaRepositories("com.resource.iPbackened")

答案 1 :(得分:0)

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

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

For Instance:

我在包 com.application 中配置了SpringBoot基本配置类 ;

我在 com.application.resource.iPbackend.User 包中移动了 UserRepository (你提到过),它对我有用,而不会改变Annotation方面的任何内容。我没有错。

由于您尚未共享Springboot配置,因此我假设您将使用默认值。如果解决方案不起作用,请分享您的弹簧启动配置,我可以尝试在我身边并做出回应。

希望这有帮助!