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

