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
相关产品推荐
相关产品推荐

