解决Spring Boot 2.6.0 新特性默认禁止循环引用
Spring Boot 2.6.0 引入了一项新特性,用于防止在使用Spring Data REST和Spring HATEOAS时产生的循环引用。当启用这个新特性时,Spring Data REST会默认使用PersistentEntityToRepresentationModelConverter
,它会自动检测并处理循环引用,避免序列化时的无限递归。
如果你需要自定义处理循环引用的方式,你可以实现RepresentationModelAssembler
接口来创建你自己的转换器。
下面是一个简单的例子,展示了如何自定义转换器:
import org.springframework.hateoas.server.RepresentationModelAssembler;
import org.springframework.stereotype.Component;
@Component
public class CustomRepresentationModelAssembler implements RepresentationModelAssembler<MyEntity, MyRepresentationModel> {
@Override
public MyRepresentationModel toModel(MyEntity entity) {
MyRepresentationModel representationModel = new MyRepresentationModel();
// 转换逻辑,这里你可以决定如何处理循环引用,比如忽略相关联的实体或者只包含关联实体的某些属性
return representationModel;
}
}
在这个例子中,MyEntity
是你的实体类,而MyRepresentationModel
是你用来表示实体信息的表示模型类。你需要根据实际情况实现转换逻辑。
如果你需要完全关闭循环引用的处理,可以设置spring.data.rest.base-path
属性,并通过配置文件关闭循环引用处理:
spring.data.rest.default-media-types-enabled=false
请注意,关闭循环引用处理可能会导致序列化错误,因此在生产环境中应谨慎使用。
评论已关闭