JSON序列化Geometry

报错:

Could not write JSON: Infinite recursion (StackOverflowError)

through reference chain: com.vividsolutions.jts.geom.Point["envelope"]

在controller返回数据到统一json转换的时候,出现了json infinite recursion stackoverflowerror的错误,即json在将对象转换为json格式的数据的时候,出现了无限递归调用的情况。

具体的情况如下:

A类中,有个属性:List<B> b, A与B的关系为 OneToMany;在B类中,有属性A a,引用到A中的字段id,并作为外键。hibernate查询结果正常,可以看到返回的A对象中,有b参数值,但在json转换的时候就出现了无限递归的情况。个人分析,应该是json在序列化A中的b属性的时候,找到了B类,然后序列化B类,而B类中有a属性,因此,为了序列化a属性,json又得去序列化A类,如此递归反复,造成该问题。

解决方法:

在B类中a的getter setter方法上加注解@JsonBackReference ,在getter上加即可解决

 

注意:此种解决方法不会在返回结果里有你注释的字段,即放弃序列化该值。这种结果不是我们想要的返回结果。

如需返回真确参数需要如下操作:

1:引入依赖

<dependency> 
	<groupId>com.bedatadriven</groupId> 
	<artifactId>jackson-datatype-jts</artifactId> 
	<version>2.4</version> 
</dependency>

2::添加注解

@JsonSerialize(using = GeometrySerializer.class)
@JsonDeserialize(contentUsing = GeometryDeserializer.class)

例如:

 

就可以返回Geometry。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: three.js 是一种用于创建交互式 3D 图形的 JavaScript 库,而 IFC(Industry Foundation Classes) 是一种用于描述建筑信息模型的行业标准格式。在 three.js 中提取 IFC 几何结构并生成 JSON 格式数据可以通过以下步骤实现: 首先,需要将 IFC 文件转换为 three.js 可识别的格式。可以使用第三方工具(如 BIMserver、IfcOpenShell 等)将 IFC 文件转换为适用于 three.js 的格式,例如 COLLADA (.dae) 或 OBJ (.obj)。 在 three.js 中,可以使用加载器(Loader)来加载转换后的文件。例如,可以使用 COLLADALoader 或 OBJLoader 来加载相应格式的文件。 加载完成后,可以通过遍历场景中的对象来提取 IFC 的几何结构信息。可以使用 three.js 提供的方法和属性来访问和处理每个对象的顶点、面等几何信息。 通过遍历对象的子元素,可以进一步获取每个对象的子级几何结构信息。这样可以递归地提取整个 IFC 模型的几何结构。 当获取到几何结构信息后,可以使用 JSON.stringify() 将其转换为 JSON 格式的字符串。这样就可以将 IFC 的几何结构以 JSON 格式保存下来。 最后,可以使用 JSON.parse() 方法将 JSON 格式的字符串转换回对象,并对其进行进一步的处理和展示。 通过上述步骤,就可以在 three.js 中提取 IFC 的几何结构并生成 JSON 格式数据,以便后续的处理、展示和分析。 ### 回答2: three.js 是一个使用 JavaScript 创建和展示 3D 图形的库。IFC(Industry Foundation Classes)是一种工业建模文件格式,用于描述建筑和基础设施项目。要从 IFC 几何数据中提取出 JSON 格式的数据,可以采用以下步骤: 首先,导入 three.js 库并创建一个场景(scene),用于展示提取的几何数据。 接下来,需要加载 IFC 文件。可以使用 three.js 提供的 IFCLoader 来加载 IFC 文件,并将其转换为 three.js 可以处理的数据结构。 加载完成后,IFC 文件中的几何数据将被转换为 three.js 的几何体(Geometry)对象。可以通过遍历几何体来访问并提取其中的数据。 在遍历过程中,可以将几何体的相关数据,如顶点坐标、法线信息和纹理坐标等,提取出来,并将其存储为 JSON 格式的数据对象。 最后,将提取的几何数据对象转换为 JSON 字符串,并进行保存或传输。 总结起来,要提取 IFC 几何数据并转换为 JSON 格式,可以使用 three.js 库加载和处理 IFC 文件,遍历几何体对象来提取相关数据,并将其转换为 JSON 格式的数据对象。 ### 回答3: three.js 是一个用于创建和显示 3D 图形的 JavaScript 库。它支持各种图形文件格式,包括 ifc(Industry Foundation Classes)。 ifc 是一种用于建筑信息模型(BIM)的通用数据格式,用于描述建筑信息和几何数据。在 three.js 中,我们可以使用 ifc 文件包含的几何数据来创建并显示建筑模型。 要提取 ifc 几何数据并将其转换为 three.js 可以使用的格式(如 JSON),我们可以使用一个库或工具来帮助我们完成这个过程。目前,有一些开源的工具可以帮助我们实现这个目标,比如 "ifc.js" 或 "web-ifc"。 这些工具在读取 ifc 文件时会解析其中的几何数据,并将其转为 JSON 格式,便于在 three.js 库中使用。我们可以将 JSON 数据加载到 three.js 场景中,并使用 three.js 提供的方法显示和操作模型。 使用这些工具的步骤大致如下: 1. 将 ifc 文件加载到 JavaScript 环境中。 2. 使用 ifc.js 或 web-ifc 等工具解析 ifc 文件的几何数据,并将其转换为 JSON 格式。 3. 将解析后的 JSON 数据加载到 three.js 场景中,创建相应的几何体对象。 4. 使用 three.js 提供的方法设置材质、光源等,并将几何体对象添加到场景中进行显示。 5. 可以通过 three.js 的控制器、相机等功能来操作和浏览模型。 总之,通过使用 ifc.js 或 web-ifc 等工具,我们可以将 ifc 文件中的几何数据提取并转换为 three.js 可以使用的 JSON 格式,从而在浏览器中创建和显示建筑模型。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值