我正在学习Java spring boot并编写了一个基本的REST API。到目前为止一切都有效。由于我使用的是 VPN,该应用程序不再工作。我收到以下错误消息:
Description:
Parameter 0 of constructor in com.example.demo.Registration required a bean of type 'com.example.demo.IUserRepository' that could not be found.
Action:
Consider defining a bean of type 'com.example.demo.IUserRepository' in your configuration.
这不可能是由于 VPN 造成的。但我不知道还可能是什么,因为在我看来一切都很好。这是程序,除了 POM 之外,所有文件都在一个包中
班级用户:
package com.example.demo;
import java.util.UUID;
import org.springframework.data.annotation.Id;
import jakarta.persistence.Entity;
@Entity
public class User {
@Id
private String id;
private String prename;
private String lastname;
private String password;
private String email;
private int age;
public User() { }
public User(String prename, String lastname, int age, String password, String email) {
this.id = UUID.randomUUID().toString();
this.prename = prename;
this.lastname = lastname;
this.password = password;
this.email = email;
this.age = age;
}
//getter
public String getID() {return id;}
public String getPrename() { return prename;}
public String getLastname() {return lastname;}
public int getAge() {return age;}
public String getEmail() {return email;}
public String getPassword() {return password;}
//setter
public void setID(String id) {this.id = id;}
public void setPrename(String prename) {this.prename = prename;}
public void setLastname(String lastname) {this.lastname = lastname;}
public void setAge(int age) {this.age = age;}
public void setEmail(String email) {this.email = email;}
public void setPassword(String password) {this.password = password;}
}
接口IUserRepository:
package com.example.demo;
import org.springframework.data.repository.CrudRepository;
public interface IUserRepository extends CrudRepository<User, String>
{
}
班级注册(简称控制器)
package com.example.demo;
import java.util.Map;
import java.util.Optional;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
//import denniscompany.websitemodels.*;
//import denniscompany.websiterepositories.*;
@RestController
public class Registration {
private IUserRepository userRepository;
public Registration(IUserRepository p_oUserRepository ) {
userRepository = p_oUserRepository;
userRepository.save(new User("Test", "User", 28, "[email protected]", "1234"));
}
@GetMapping("/")
public Iterable<User> getUsers() { return userRepository.findAll(); }
还有我的 POM.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.2.4</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>demo</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>17</java.version>
</properties>
<dependencies>
<dependency>
<groupId>jakarta.persistence</groupId>
<artifactId>jakarta.persistence-api</artifactId>
<version>3.2.0-B01</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-rest</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>2.2.224</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
在 Eclipse 中,我没有收到无法编译的错误消息。所以希望有人能帮助我。
我已在此链接上尝试过这些解决方案Can't Autowire @Repository 注解的接口在 Spring Boot 中
但它不起作用。我尝试
Autowire
我的存储库并将注释设置为我的界面Repository
。另外,我将注释设置为我的主要注释EnableJpaRepositories
。但它给了我同样的错误。所有文件都在一个包中,所以我不需要 scanComponent 或 scanEntity 等。我的链接的解决方案已有 9 年历史,可能已经过时了。
我在 Eclipse 中遇到错误以及导入我的接口的解决方案。但是当我点击它时什么也没有发生。可能是因为我无法导入它,因为它位于同一个包中。所以我在一个包中有多个文件,但它们看不到彼此。
我想我已经有了答案。当我导入
CrudRepository
时,库将 CrudRepository
注释为 @norepositrorybean
。因此,CrudRepository 不是一个 bean。
这同样适用于 JpaRepository。请参阅链接 jpaRepository