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

