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

SpringBoot API连接H2数据库返回空响应问题求助

排查SpringBoot API返回空响应[{}]的问题

我来帮你捋捋这个问题——你说调试时控制器返回的User明明是预期的用户数据,但接口却返回空的[{}],这种情况几乎都是JSON序列化环节出了问题,Jackson没法正确把User对象转换成JSON格式,才会输出空对象。下面是几个最常见的原因和对应的解决办法:

1. User类缺少Getter方法(最大概率)

Spring Boot默认用Jackson做对象到JSON的序列化,而Jackson是通过Getter方法来访问对象属性的。如果你的User类里属性都是private,但没写对应的getXXX()方法,Jackson根本拿不到属性值,自然只能输出空对象{}。

举个正确的User类示例:

public class User {
    private Long id;
    private String username;
    private String email;

    // 必须要有无参构造(Jackson序列化的基础要求)
    public User() {}

    // 带参构造根据业务需求添加即可
    public User(Long id, String username, String email) {
        this.id = id;
        this.username = username;
        this.email = email;
    }

    // 核心!必须为每个属性添加Getter方法
    public Long getId() {
        return id;
    }

    public String getUsername() {
        return username;
    }

    public String getEmail() {
        return email;
    }

    // 如果需要接收POST请求的User参数,还得加Setter方法,GET序列化只需要Getter
    public void setId(Long id) {
        this.id = id;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public void setEmail(String email) {
        this.email = email;
    }
}

2. 误加了@JsonIgnore注解

检查下你的User类,有没有在属性或者Getter方法上标注@JsonIgnore?这个注解会让Jackson忽略对应属性的序列化,要是不小心给所有属性都加了,返回的JSON自然是空的。

3. User类没有无参构造函数

Jackson序列化对象时,默认要求类有一个无参构造函数。如果你的User类只有带参构造,没有无参构造,轻则出现空对象,重则直接抛出序列化异常。所以一定要补上无参构造,就像上面示例里那样。

4. 依赖缺失(概率较低)

Spring Boot的spring-boot-starter-web默认已经包含了Jackson依赖,但如果你的项目手动排除了这个依赖,或者依赖配置出了问题,也会导致无法序列化。检查下你的依赖配置:

Maven示例:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

Gradle示例:

implementation 'org.springframework.boot:spring-boot-starter-web'

最后确认下Controller方法

虽然你说调试时User对象是正常的,但还是确认下GetMapping方法的返回值是不是正确的User或者List<User>,比如:

@GetMapping("/{id}")
public User getUserById(@PathVariable Long id) {
    return userService.getUserById(id);
}

// 返回列表的情况
@GetMapping
public List<User> getAllUsers() {
    return userService.getAllUsers();
}

优先从Getter方法和无参构造这两点排查,应该就能解决问题了!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:35:48