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

Spring Boot接口返回空JSON对象列表问题排查求助

问题解决方案

针对你遇到的接口返回空JSON对象列表的问题,以下是几个可落地的排查方向和解决方案:

1. 显式绑定实体类与MongoDB字段映射

即使你检查过字段匹配,Spring Data MongoDB默认的字段映射可能因为大小写、命名规则差异导致无法正确赋值。使用@Field注解明确指定MongoDB集合中的字段名:

修改Movie实体类:

@Document(collection ="Movies")
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Movie {
    @Id
    private ObjectId id;
    
    @Field("imdbId") // 替换为Mongo集合中实际的字段名
    private String imdbId;
    
    @Field("title")
    private String title;
    
    @Field("releaseDate")
    private String releaseDate;
    
    @Field("trailerLink")
    private String trailerLink;
    
    @Field("genres")
    private List<String> genres;
    
    @Field("poster")
    private String poster;
    
    @Field("backdrops")
    private List<String> backdrops;
    
    @DocumentReference
    private List<Review> reviewIds;
}

2. 验证Lombok注解是否生效

@Data依赖Lombok自动生成getter/setter方法,若Lombok未正确配置,Jackson无法序列化字段:

  • 确认Maven/Gradle中包含Lombok依赖(以Maven为例):
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <optional>true</optional>
</dependency>
  • 检查IDE是否安装Lombok插件,并开启注解处理(Annotation Processing)功能。
  • 临时替换@Data为手动编写的getter/setter方法,测试接口是否能返回有效数据。

3. 匹配ObjectId与MongoDB数据类型

如果MongoDB集合中的_id字段存储的是字符串而非ObjectId类型,需修改实体类的id字段类型:

@Id
private String id; // 替换原有的ObjectId类型

若确实是ObjectId类型,确保Jackson能正确序列化它,添加MongoDB的Jackson模块依赖:

<dependency>
    <groupId>com.fasterxml.jackson.datatype</groupId>
    <artifactId>jackson-datatype-mongodb</artifactId>
</dependency>

4. 排查@DocumentReference的影响

@DocumentReference会触发关联文档的懒加载,可能在序列化时出现异常。先临时注释该字段,测试接口是否能返回其他字段的数据:

// @DocumentReference
// private List<Review> reviewIds;

若注释后恢复正常,说明关联查询存在问题:

  • 检查Review集合中是否存在与Movie的reviewIds匹配的_id数据
  • 添加@DocumentReference(lazy = false)强制加载关联数据

5. 启用日志排查查询结果

在服务类中添加日志,查看findAll()实际返回的数据内容:

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

@Service
public class Movieservice {
    private static final Logger logger = LoggerFactory.getLogger(Movieservice.class);
    
    @Autowired
    private Movierepository movieRepository;
    
    public List<Movie> allMovies() {
        List<Movie> movies = movieRepository.findAll();
        logger.info("查询到的电影数据:{}", movies);
        return movies;
    }
}

通过日志确认查询结果是否包含有效字段,再针对性处理序列化问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 06:42:53