从 Spring Boot 2.7 升级到 3.0.8 时出现 Stackoverflow 错误

问题描述 投票:0回答:1

我正在将 SB 版本从 2.7.12 升级到 3.0.8,升级时出现以下错误 -

java.lang.StackOverflowError: null
       at org.springframework.data.mapping.model.ClassGeneratingPropertyAccessorFactory.getPropertyAccessor(ClassGeneratingPropertyAccessorFactory.java:82)
       at org.springframework.data.mapping.model.InstantiationAwarePropertyAccessorFactory.lambda$getPropertyAccessor$0(InstantiationAwarePropertyAccessorFactory.java:42)
       at org.springframework.data.mapping.model.InstantiationAwarePropertyAccessor.getProperty(InstantiationAwarePropertyAccessor.java:124)
       at org.springframework.data.mongodb.core.convert.MappingMongoConverter.writeProperties(MappingMongoConverter.java:887)
       at org.springframework.data.mongodb.core.convert.MappingMongoConverter.writeInternal(MappingMongoConverter.java:869)
       at org.springframework.data.mongodb.core.convert.MappingMongoConverter.writePropertyInternal(MappingMongoConverter.java:1003)
       at org.springframework.data.mongodb.core.convert.MappingMongoConverter.writeProperties(MappingMongoConverter.java:894)
       at org.springframework.data.mongodb.core.convert.MappingMongoConverter.writeInternal(MappingMongoConverter.java:869)
       at org.springframework.data.mongodb.core.convert.MappingMongoConverter.writePropertyInternal(MappingMongoConverter.java:1003)
       at org.springframework.data.mongodb.core.convert.MappingMongoConverter.writeProperties(MappingMongoConverter.java:894)
       at org.springframework.data.mongodb.core.convert.MappingMongoConverter.writeInternal(MappingMongoConverter.java:869)
       at org.springframework.data.mongodb.core.convert.MappingMongoConverter.writePropertyInternal(MappingMongoConverter.java:1003)
       at org.springframework.data.mongodb.core.convert.MappingMongoConverter.writeProperties(MappingMongoConverter.java:894)
       at org.springframework.data.mongodb.core.convert.MappingMongoConverter.writeInternal(MappingMongoConverter.java:869)
       at org.springframework.data.mongodb.core.convert.MappingMongoConverter.writePropertyInternal(MappingMongoConverter.java:1003)
       at org.springframework.data.mongodb.core.convert.MappingMongoConverter.writeProperties(MappingMongoConverter.java:894)
       at org.springframework.data.mongodb.core.convert.MappingMongoConverter.writeInternal(MappingMongoConverter.java:869)

我正在使用 joda.time 从 mongo 访问对象。

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.xxx.util.JodaDateTimeCustomDeserializer;
import com.xxx.util.JodaDateTimeCustomSerializer;

import org.joda.time.DateTime;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;

import lombok.Data;

@Document(collection = "data")
@JsonIgnoreProperties(ignoreUnknown = true)
@Data
public class IMData
{
  @Id
  private String id;
  private String uid;
  @JsonSerialize(using = JodaDateTimeCustomSerializer.class)
  @JsonDeserialize(using = JodaDateTimeCustomDeserializer.class)
  private DateTime timestamp;
  @JsonSerialize(using = JodaDateTimeCustomSerializer.class)
  @JsonDeserialize(using = JodaDateTimeCustomDeserializer.class)
  private DateTime metaDataTimestamp;
  private String ioConfig;
  private int changeCount;
  private String inventoryDbId;
  private String hostname;
  private boolean isManual;
}

IMO,堆栈溢出错误应该意味着一些循环依赖,但 Springboot 这里没有抛出正确的错误。

java spring spring-boot spring-data-mongodb
1个回答
0
投票

Lombok @Data 注释包含 @ToString,这会导致关系上的循环引用。如果您不需要@ToString,请将@Data提取到@Getter @Setter等。或者您只需在字段上写@ToString.exclude来防止。

© www.soinside.com 2019 - 2024. All rights reserved.