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

Spring Boot Controller返回JSON为空结构[{},{}]的原因排查

问题原因及解决方案

核心原因

你的Student实体类所有字段均为**私有(private)**修饰,而Spring Boot默认依赖Jackson进行JSON序列化时,默认仅能访问类的公共(public)getter方法或公共字段。由于未为私有字段提供对应的getter方法,Jackson无法读取字段值,因此序列化后输出空对象{}。

另外,重写toString()方法无效,因为JSON序列化逻辑依赖字段访问权限或getter方法,与toString()的实现无关。

解决方案

以下是几种可行的修复方式:

1. 手动添加字段getter方法

修改Student类,为每个私有字段添加对应的getter:

package com.training.casapp.entity;

import org.springframework.data.cassandra.core.cql.PrimaryKeyType;
import org.springframework.data.cassandra.core.mapping.Column;
import org.springframework.data.cassandra.core.mapping.PrimaryKeyColumn;
import org.springframework.data.cassandra.core.mapping.Table;

@Table("student")
public class Student {

    @PrimaryKeyColumn(type = PrimaryKeyType.PARTITIONED) 
    private Integer student_id;
    @Column 
    private String student_city;
    @Column 
    private Integer student_fees;
    @Column 
    private String student_name;
    @Column 
    private Long student_phone;

    // 为每个字段添加getter方法
    public Integer getStudent_id() {
        return student_id;
    }

    public String getStudent_city() {
        return student_city;
    }

    public Integer getStudent_fees() {
        return student_fees;
    }

    public String getStudent_name() {
        return student_name;
    }

    public Long getStudent_phone() {
        return student_phone;
    }
}

2. 使用Lombok简化代码(推荐)

若项目已引入Lombok依赖,可使用@Data注解自动生成getter、setter、toString等方法,简化代码编写:
首先确保Maven的pom.xml中添加Lombok依赖:

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <optional>true</optional>
</dependency>

然后修改Student类:

package com.training.casapp.entity;

import lombok.Data;
import org.springframework.data.cassandra.core.cql.PrimaryKeyType;
import org.springframework.data.cassandra.core.mapping.Column;
import org.springframework.data.cassandra.core.mapping.PrimaryKeyColumn;
import org.springframework.data.cassandra.core.mapping.Table;

@Data
@Table("student")
public class Student {

    @PrimaryKeyColumn(type = PrimaryKeyType.PARTITIONED) 
    private Integer student_id;
    @Column 
    private String student_city;
    @Column 
    private Integer student_fees;
    @Column 
    private String student_name;
    @Column 
    private Long student_phone;
}

3. 配置Jackson允许访问私有字段(不推荐)

可通过配置Jackson模块直接访问私有字段,但该方式会破坏类的封装性,不建议生产环境使用:
创建Jackson配置类:

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.annotation.JsonAutoDetect;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class JacksonConfig {
    @Bean
    public ObjectMapper objectMapper() {
        ObjectMapper mapper = new ObjectMapper();
        mapper.setVisibility(mapper.getSerializationConfig().getDefaultVisibilityChecker()
                .withFieldVisibility(JsonAutoDetect.Visibility.ANY)
                .withGetterVisibility(JsonAutoDetect.Visibility.NONE)
                .withSetterVisibility(JsonAutoDetect.Visibility.NONE)
                .withCreatorVisibility(JsonAutoDetect.Visibility.NONE));
        return mapper;
    }
}

验证修改

重启Spring Boot应用后,再次访问http://localhost:8081/casapp/studentslist,即可获取包含学生字段数据的正常JSON响应。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 21:33:22