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

@RestController返回空JSON对象问题的排查与解决咨询

排查与解决方法
  • 检查父类字段的序列化权限
    BaseEntity中的name字段是包级访问权限,且没有添加@Getter注解或手动编写getter方法。Jackson默认只会序列化public字段或带有getter方法的字段,导致子类(City、Country)继承的name字段无法被序列化,最终返回空对象{}。
    解决:给BaseEntity添加Lombok的@Getter注解,或者手动为id和name编写getter方法:

    @MappedSuperclass
    @Getter // 添加该注解
    public class BaseEntity {
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        private Integer id;
    
        @Column(unique=true)
        String name;
    
        @Override
        public String toString() {
            return name;
        }
    }
    
  • 验证数据库数据有效性
    直接执行SQL查询数据库,确认city表的name、country_id字段是否有有效值,country表中是否存在对应country_id的记录且name字段不为空。避免因数据库数据为空导致序列化结果为空。

  • 调试Controller返回的对象
    在CityController的getCities方法中添加断点或日志,查看cityRepository.findAll()返回的City对象的name、country属性是否实际有值。如果查询出来的对象本身属性为空,需要检查Repository的查询逻辑或数据初始化代码。

  • 排查Jackson序列化配置
    确认项目中是否自定义了ObjectMapper并设置了严格的序列化规则(比如只序列化public字段),如果有,需要调整配置允许序列化父类的包级字段,或者直接通过添加getter方法来解决。

  • 排除Json注解的影响
    临时注释掉Country中的@JsonManagedReference和City中的@JsonBackReference注解,测试返回结果是否正常,排除循环引用注解导致的字段序列化被忽略的问题。如果注释后正常,可以重新调整这两个注解的使用,或者改用@JsonIgnore来处理循环引用。

内容的提问来源于stack exchange,提问作者Kifsif

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 15:35:40