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

Spring Boot连接MongoDB调用Repo时出现NPE问题求助

Spring Boot MongoDB 连接后调用仓库出现 NullPointerException 问题

我创建了一个Spring Boot应用,在application.properties中配置了MongoDB连接:

spring.data.mongodb.uri=mongodb://localhost:27017/product-service

同时已通过MongoDB Compass使用该URI成功添加连接,且确认创建了名为product-service的数据库,MongoDB服务也正常运行,但调用数据仓库获取数据时抛出NullPointerException(NPE)。启用MongoDB日志后未发现相关请求日志。

错误日志

java.lang.NullPointerException: null
at com.emanuel.productservice.controller.ProductController.getAllProducts(ProductController.java:29) ~[main/:na]

相关代码

控制器代码

@RestController
@RequestMapping("api/product")
@RequiredArgsConstructor
public class ProductController {

    private ProductService productService;

    @GetMapping
    @ResponseStatus(HttpStatus.OK)
    public List<ProductResponse> getAllProducts(){
        return productService.getAllProducts();
    }

}

服务代码

@Service
@RequiredArgsConstructor
@Slf4j
public class ProductService {

    private final ProductRepo productRepo;

    public List<ProductResponse> getAllProducts() {
        List<Product> products = productRepo.findAll(); // 此处出现NPE
        return products.stream().map(this::mapToProductResponse).collect(Collectors.toList());
    }
}

仓库代码

public interface ProductRepo extends MongoRepository<Product, String> {

}

使用版本与依赖

  • MongoDB Community Server 6.0.4
  • Spring Boot 2.7.8
  • Gradle依赖:
implementation 'org.springframework.boot:spring-boot-starter-data-mongodb'

问题原因与解决方法

核心问题

控制器中的productService未被正确注入。你使用了@RequiredArgsConstructor注解,但productService字段没有添加final修饰符,导致Lombok无法生成对应的构造函数完成依赖注入,最终productService为null,调用其方法时抛出NPE。

修复步骤

修改ProductController代码,给productService添加final修饰符:

@RestController
@RequestMapping("api/product")
@RequiredArgsConstructor
public class ProductController {

    private final ProductService productService; // 添加final修饰符

    @GetMapping
    @ResponseStatus(HttpStatus.OK)
    public List<ProductResponse> getAllProducts(){
        return productService.getAllProducts();
    }

}

额外验证点

  1. 确认Product实体类已添加@Document注解,指定对应集合(如@Document(collection = "products")),否则Spring Data MongoDB无法映射到正确的集合。
  2. 检查项目组件扫描范围,确保ProductController、ProductService、ProductRepo所在包被Spring Boot扫描到(默认扫描启动类所在包及其子包)。

内容的提问来源于stack exchange,提问作者noob234

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 17:11:12