Spring Boot整合Hibernate查询返回空JSON如何解决
Spring Boot JPA GET接口返回空JSON排查方案
按优先级从高到低查,每步验证过了再往下走:
- 先看实际执行的SQL结果
你配置里开了show-sql: true,发GET请求的时候把控制台打印的那条select语句直接复制到MySQL Workbench里跑一下:- 如果SQL跑出来本身就是空结果,说明是连接、映射或者数据本身的问题,往下查
- 如果SQL能查到数据,那就是后端查到了但序列化没输出,直接跳第三步查序列化问题
- 排查连接、映射和数据问题
- 驱动版本匹配问题:如果你用的是MySQL 8及以上版本,配置里的旧驱动类
com.mysql.jdbc.Driver要换成com.mysql.cj.jdbc.Driver,JDBC连接串后面补全必要参数,避免时区等兼容问题导致查询异常:url: "jdbc:mysql://localhost:3306/mydbtest?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf8" driverClassName: "com.mysql.cj.jdbc.Driver" - 实体映射问题:你实体类的主键
@GeneratedValue没指定策略,MySQL场景下要明确指定自增策略适配,不然主键识别错也会查不到数据:
另外注意Linux下MySQL默认表名大小写敏感,确认你库里的表名确实是小写的@Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id;users,和@Table注解里配置的一致,不然映射到错的空表自然返回空。 - 数据有效性验证:直接调你写的POST接口插一条测试数据,再调GET看能不能拿到刚插的记录。如果能拿到,说明你之前在Workbench手动插的数据没提交事务,或者插错了库、插错了表。
- 驱动版本匹配问题:如果你用的是MySQL 8及以上版本,配置里的旧驱动类
- 排查序列化问题
如果在Controller层打断点,能看到findAllUsers()返回的对象里字段都有值,但接口返回的JSON是空的,基本是Lombok失效导致的:- 先确认IDE装了Lombok插件,项目里的Lombok依赖是编译期生效的,不是只在测试或者运行时才加载
- 临时把User类上的
@Data注解去掉,手动给所有字段写getter/setter方法,重启项目再测。如果这时候能正常返回字段值,就是Lombok没生效,重新导下依赖、重启IDE就能解决。
快速判断问题方向:如果接口返回的是空数组
[],就是查询环节没拿到数据,优先查第二步的连接、映射、数据问题;如果返回的是字段全为null的对象或者空对象{},就是序列化环节的问题,优先查第三步。
内容的提问来源于stack exchange,提问作者user18308772
相关产品推荐
相关产品推荐

