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

SpringBoot调用接口返回空白页仅显示[{},{},{}]空对象列表问题

问题原因分析

接口返回[{},{},{}]但控制台打印数据正常,核心原因是Spring Boot默认使用的Jackson序列化工具无法正常读取MyClass类的字段值,最终序列化结果为空对象。控制台打印走的是对象的toString()方法逻辑,和Jackson序列化逻辑完全独立,因此会出现两端表现不一致的情况。

常见具体触发原因

  • MyClass类的字段没有提供public类型的getter方法
    Jackson默认只能读取public修饰的字段,或者有public getter的私有字段,如果字段都是私有且没有对应getter,就会被判定为没有可序列化的属性,序列化为空对象。
  • 序列化排除注解覆盖了需要返回的字段
    如果MyClass类或者字段上添加了@JsonIgnore、@JsonIgnoreProperties等Jackson注解,把所有需要返回的字段都标记为序列化排除,也会生成空对象。
  • 持久层代理对象无法正常序列化
    如果myservice.getAllBlocks()返回的是JPA、MyBatis等框架生成的懒加载代理对象,序列化时没有在事务范围内触发属性加载,也会导致字段值无法被正常读取。
  • 全局Jackson配置异常
    如果项目中配置了错误的Jackson全局序列化规则,比如全局排除了指定包下类的字段序列化,或者开启了spring.jackson.serialization.fail-on-empty-beans=false,序列化失败不会抛出异常而是直接返回空对象。
解决方案
  • 给MyClass类的所有需要返回的字段添加public getter方法,或者直接引入Lombok给类添加@Data注解自动生成getter/setter等通用方法:
// 示例:添加getter方法
public class MyClass {
    private Long id;
    private String content;

    // 必须添加对应字段的public getter
    public Long getId() {
        return id;
    }
    public String getContent() {
        return content;
    }
}
  • 检查MyClass类和内部字段上的序列化相关注解,移除针对需要返回字段的@JsonIgnore等排除注解。
  • 如果是代理对象序列化问题,可关闭对应字段的懒加载策略,或者在事务范围内提前加载完所有需要返回的属性再返回给前端。
  • 临时修改Jackson配置开启序列化异常抛出,定位具体问题:在配置文件中添加spring.jackson.serialization.fail-on-empty-beans=true,调用接口时会直接抛出序列化异常,可根据异常信息精准定位问题类和字段。

内容的提问来源于stack exchange,提问作者M. Osama Alghwell

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 08:15:03