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

Spring Boot接口返回[{ }]空对象数组问题排查求助

解决GET请求返回空对象数组但MySQL数据库存在数据的问题

针对你遇到的浏览器和Postman调用GET接口返回[{ }]但数据库有数据的情况,以下是接地气的排查和解决步骤:

1. 实体类字段映射排查

  • 字段与列名匹配问题:检查实体类字段和数据库列名是否对应。如果数据库列是下划线命名(如emp_id),实体类是驼峰命名(empId),确保Spring Boot的驼峰转下划线配置开启(默认开启,若手动关闭需在application.properties加spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.CamelCaseToUnderscoresNamingStrategy);如果列名完全不匹配,需给字段加@Column(name = "数据库列名")注解。
  • Lombok生效检查:确认实体类加了@Data注解,且Lombok在STS中正常生效(STS需安装Lombok插件,可通过Help->Eclipse Marketplace搜索安装)。@Data会自动生成getter、setter和无参构造,若手动编写了有参构造,必须补充无参构造(可加@NoArgsConstructor),否则Spring Data JPA无法实例化实体对象。
  • 字段访问权限:实体类字段若为私有,必须有对应的getter方法(@Data自动生成),否则JSON序列化时无法读取字段值,返回空对象。

2. Repository层验证

  • 查询方法正确性:确认Repository接口正确继承JpaRepository<Employee, 主键类型>,自定义查询方法(如findAll())无拼写错误;若使用@Query注解写原生SQL,检查SQL语句中的表名、列名是否与数据库完全一致,避免拼写错误。
  • 包扫描配置:Spring启动类需加@SpringBootApplication(默认扫描同包及子包),若Repository在其他包下,需补充@EnableJpaRepositories(basePackages = "com.yourpackage.repository")指定扫描路径。

3. 数据库连接与事务检查

  • 数据源配置验证:再次确认application.properties中的数据库配置:
    spring.datasource.url=jdbc:mysql://localhost:3306/codedecode?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
    spring.datasource.username=root
    spring.datasource.password=yourpassword
    spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
    
    重点检查时区配置(MySQL 8.0必须指定)、库名是否正确,以及数据库用户是否有codedecode库的查询权限。
  • 只读事务尝试:在Controller的GET方法或Service方法上加@Transactional(readOnly = true),确保查询操作在事务上下文执行,避免因事务问题导致数据无法读取。

4. JSON序列化排查

  • 序列化规则检查:确认实体类没有在非忽略字段上加@JsonIgnore注解;若使用Jackson自定义配置,检查是否开启了SerializationFeature.FAIL_ON_EMPTY_BEANS(默认关闭,若开启会导致空对象报错,但这里返回空数组里的空对象,可能是字段全为null)。
  • 字段类型匹配:检查实体类字段类型与数据库列类型是否一致,比如数据库是VARCHAR,实体类用Integer会导致映射失败,字段值为null,序列化后呈现空对象。

5. 日志排查(终极手段)

添加日志配置,查看SQL执行细节:
在application.properties中加入:

logging.level.org.springframework.data.jpa=DEBUG
logging.level.org.hibernate.SQL=DEBUG
logging.level.org.hibernate.type.descriptor.sql.BasicBinder=TRACE

启动项目后调用接口,查看控制台日志:

  • 检查是否执行了正确的SELECT语句;
  • 查看SQL执行后返回的结果集是否有数据;
  • 确认结果集的列与实体类字段是否正确映射,若映射失败会显示字段为null。

内容的提问来源于stack exchange,提问作者Faiz Ahmad Khan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 07:37:17