You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot项目UserRepository Bean缺失及API白标错误求助

Spring Boot项目启动及API访问问题求助

一、启动失败:找不到UserRepository Bean

报错信息:

APPLICATION FAILED TO START

Description:
Parameter 0 of constructor in com.baothien.server.User.UserService required a bean of type 'com.baothien.server.User.UserRepository' that could not be found.
Action:
Consider defining a bean of type 'com.baothien.server.User.UserRepository' in your configuration.
Process finished with exit code 0

已做操作:

  • UserRepository添加了@Repository注解
  • UserService通过构造函数注入UserRepository
  • 主类配置了@EntityScan和@EnableJpaRepositories

二、添加@ComponentScan后启动正常,但API访问白标错误

添加@ComponentScan(basePackages = "com.baothien.server.User.*")后项目可启动,但访问http://localhost:8080/api/v1/test时出现White Label Error,无法找到页面。

项目结构

主类位于com.baothien.server包,User相关的实体、Repository、Service、Controller均在com.baothien.server.User子包下。

相关代码

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;
}

ServerApplication.java(主类)

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);
    }

}

解决方案

问题一:找不到UserRepository Bean的修复

  1. 修正包扫描路径:@EntityScan和@EnableJpaRepositories的basePackages不需要加.*,直接写com.baothien.server.User即可。Spring包扫描默认递归子包,加.*会被解析为扫描该包下的子包,反而漏掉当前包内的Repository。

    修改主类注解:

    @EntityScan(basePackages = "com.baothien.server.User")
    @EnableJpaRepositories(basePackages = "com.baothien.server.User")
    
  2. 移除冗余@Autowired:构造函数注入时无需在字段上添加@Autowired,Spring 4.3+会自动识别构造函数注入,冗余注解可能引发冲突。修改UserService和UserController:

    UserService:

    @Service
    public class UserService {
        private final UserRepository userRepository;
    
        public UserService(UserRepository userRepository) {
            this.userRepository = userRepository;
        }
        // 其他方法不变
    }
    

    UserController:

    @RestController
    @RequestMapping("/api/v1")
    public class UserController {
        private final UserService userService;
    
        public UserController(UserService userService) {
            this.userService = userService;
        }
        // 其他方法不变
    }
    
  3. 修复JPA查询语法:@Query中写SELECT * FROM Users属于原生SQL,需添加nativeQuery = true;如果用JPQL则要写成SELECT u FROM User u。修改UserRepository:

    @Query(value = "SELECT * FROM Users", nativeQuery = true)
    // 或JPQL写法:@Query("SELECT u FROM User u")
    List<User> getAllUsers();
    

问题二:API访问白标错误的修复

  1. 移除错误的@ComponentScan:添加@ComponentScan(basePackages = "com.baothien.server.User.*")后,Spring只会扫描该路径下的Bean,主类所在包的自动配置组件会被排除,导致WebMvc功能失效。

    主类位于com.baothien.server包,@SpringBootApplication默认会扫描主类所在包及其子包,直接移除额外的@ComponentScan即可。

  2. 验证访问路径:确保项目启动端口为8080,访问路径http://localhost:8080/api/v1/test拼写正确(代码中返回文本的拼写错误不影响接口访问)。


内容的提问来源于stack exchange,提问作者Hoàng Thiện

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 22:42:49