首先,我想给予很多感谢大家谁读我的问题,并希望帮助我解决它,所以,我有一个问题,这是关于没有找到bean在我的项目.我有一个仓库名为“UserRepository”和在我的服务是“UserService”有@Autowired该仓库,它没有找到我的仓库,虽然我添加了仓库注解.“UserService”没有找到仓库bean
这是我的问题:
应用程序启动失败
说明:
com.baothien.server.User.UserService中构造函数的参数0需要类型为“com.baothien.server.User.UserRepository”的Bean,但找不到该Bean。
行动:
考虑在您的配置中定义一个类型为'com.baothien.server.User.UserRepository'的bean。
进程已完成,退出代码为0
我的项目结构:My project structure
UserRepository.java
package com.baothien.server.User;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
public interface UserRepository extends JpaRepository<User, Long> {
@Query("SELECT * FROM Users")
List<User> getAllUsers();
}
UserService.java
package com.baothien.server.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class UserService {
@Autowired
private final UserRepository userRepository;
public UserService(UserRepository userRepository) {
this.userRepository = userRepository;
}
public List<User> getAllUsers() {
return userRepository.getAllUsers();
}
}
UserController.java
package com.baothien.server.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RestController
@RequestMapping("/api/v1")
public class UserController {
@Autowired
private final UserService userService;
public UserController(UserService userService) {
this.userService = userService;
}
@GetMapping("/test")
public String test() {
return "GET User API succesfully!";
}
@GetMapping("/get-users")
public List<User> getUsers() {
return userService.getAllUsers();
}
}
User.java
package com.baothien.server.User;
import jakarta.persistence.*;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.data.annotation.Id;
@Entity
@Table
@Data
@NoArgsConstructor
public class User {
@Id
@SequenceGenerator(
name = "user_sequence",
sequenceName = "user_sequence",
allocationSize = 1
)
@GeneratedValue(
strategy = GenerationType.SEQUENCE,
generator = "user_sequence"
)
private Long id;
private String email;
private String fullName;
private String role;
private String password;
}
主要方法
package com.baothien.server;
import com.baothien.server.User.UserController;
import com.baothien.server.User.UserRepository;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.domain.EntityScan;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
@SpringBootApplication
@EntityScan(basePackages = {"com.baothien.server.User.*"})
@EnableJpaRepositories(basePackages = {"com.baothien.server.User.*"})
public class ServerApplication {
public static void main(String[] args) {
SpringApplication.run(ServerApplication.class, args);
}
}
我已经尽力了,但是这个问题还是没有解决,我真的需要一个解决方案。谢谢你阅读我的问题,再见。
UPDATE:我使用@ComponentScan:
@ComponentScan(basePackages = "com.baothien.server.User.*")
它运行,但当我在Postman上测试时,它有白色标签错误,找不到页面(http://localhost:8080/api/v1/test)。正如你所看到的,我的控制器有/test路径,我不明白为什么它有这个错误。
我试着在很多论坛上找到解决方案,但都不能解决这个问题
2条答案
按热度按时间3qpi33ja1#
你在努力。
1.你不需要
@EntityScan
1.你不需要
@EnableJpaRepositories
@Repository
不做任何事情JpaRepository
或者更确切地说CrudRepository
已经有了一个findAll
来检索所有实体。放弃你的getAllUsers
方法吧。1.您使用的是错误的
@Id
,您使用的是Spring Data,而您需要的是jakarta.persistence
。第4点和第5点实际上是你的问题,因为你写的查询是错误的,它应该读为
SELECT u FROM User u
。这是一个JPQL而不是SQL查询。然而,正如所述,你不需要它,因为已经有一个findAll
方法。需要一个@Id
用于JPA实体,所以这也会使它失败。clj7thdc2#
您的basePackages太窄。请尝试