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

Spring Boot+MongoDB项目(Lombok)调用repository.findAll()时JSON序列化报错求助

解决Spring Boot + MongoDB中repository.findAll()的JSON序列化错误

嘿,我之前也碰到过几乎一模一样的问题,咱们来一步步拆解解决它。

首先,先明确错误的核心原因:你调用repository.findAll()后,Spring试图把返回的UserEntity对象序列化为JSON时,遇到了UserEntity$Description这个内部类——要么这个类没有可被序列化的属性,要么Lombok的注解没正确作用在它上面,再加上Jackson默认开启了FAIL_ON_EMPTY_BEANS特性,一旦发现没有属性的空类就会抛出500错误。

下面是几种可行的解决方案,你可以根据自己的情况选:

方案1:修复内部类的Lombok注解与访问权限

如果Description是UserEntity的内部类,先检查这两点:

  • 把内部类改成静态内部类:非静态内部类会持有外部类的引用,序列化时容易出问题,静态内部类就不会有这个问题。
  • 确保Lombok的注解(比如@Data、@Getter)正确加在内部类上,让它生成可访问的属性或方法。

示例代码:

@Data
public class UserEntity {
    // 你的其他实体属性,比如id、username等
    private String id;
    private String username;

    // 改成静态内部类,并加上Lombok注解
    @Data
    public static class Description {
        // 如果这个类确实需要存在但暂时没属性,可以先加个占位属性,或者用下面的方案2/3
        private String content;
    }
}

方案2:禁用Jackson的FAIL_ON_EMPTY_BEANS特性

如果你的Description类确实不需要任何属性,那可以直接关闭Jackson的这个严格检查特性,有两种方式:

方式A:通过配置类实现

创建一个Jackson配置类,修改ObjectMapper的设置:

@Configuration
public class JacksonSerializationConfig {
    @Bean
    public ObjectMapper customObjectMapper() {
        ObjectMapper objectMapper = new ObjectMapper();
        // 禁用空类序列化失败的特性
        objectMapper.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS);
        return objectMapper;
    }
}

方式B:通过application.properties配置

直接在配置文件里加一行配置,更简单:

spring.jackson.serialization.fail-on-empty-beans=false

方案3:忽略不需要序列化的内部类

如果Description类根本不需要被序列化返回给前端,直接给它加上@JsonIgnore注解,让Jackson跳过这个类的序列化:

@Data
public class UserEntity {
    // 其他属性...

    @JsonIgnore
    public class Description {
        // 类内容...
    }
}

选其中一个方案应该就能解决你的问题了,我当时是用方案2快速解决的,后来重构代码时给内部类加上了必要属性,就把配置改回去了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 07:31:32