模型衍生 API 响应未通过 Jackson 映射
Posted
技术标签:
【中文标题】模型衍生 API 响应未通过 Jackson 映射【英文标题】:Model Derivative API responses not mapping through Jackson 【发布时间】:2018-05-14 09:11:24 【问题描述】:是否对模型衍生 API 的响应对象进行了更新,因为我们在将 3D 模型请求的响应映射回清单和元数据对象时遇到问题。
两者都在抛出 Jackson 错误。
-
GetManifest 正在返回一个未处理的角色枚举
GetMetadataForGuid 正在抛出 - 非法字符((CTRL-CHAR,代码 31))
谢谢
【问题讨论】:
其他一些使用 JAVA 的客户报告了类似的问题。我正在调查,会尽快回复您。 【参考方案1】:我知道这个问题有什么问题。 Get Manifest 端点的响应最近确实发生了一些变化。 Revit 生成的清单的几何节点旁边将有一个属性数据库节点。因此,一个新角色是“Autodesk.CloudPlatform.PropertyDatabase”。而旧的 JAVA 对象ManifestChildren.JAVA 并没有声明角色。这导致了失败。
要修复它,您只需在 ManifestChildren.JAVA 中添加新角色即可,例如
我已请求提交 JAVA SDK。如果你将 SDK 源代码合并到你的项目中,你可以直接在你身边修改它。
希望这会有所帮助。
【讨论】:
我们如何跟踪对象何时改变形状?我在任何地方都找不到任何详细说明更改的发行说明?谢谢 @Neil_M 这听起来是一个错过宣布的变化。我们已向工程师团队提出请求,要求在未来发布有关此类对象更改的公开通知。对给您的项目造成的所有麻烦表示歉意。【参考方案2】:这是回答第二个问题,供大家参考。
问题是由于在调用 GET :urn/metadata/:guid 时标头设置为“gzip”格式。如果不是“gzip”,一切正常。而使用 Postman 等其他方式,带有 gzip 的 header 也可以工作。
过去,当客户端使用 gzip 标头时,实际上它不会触发 gzip 编码。所以一切都很好。最近发布后,如果指定了gzip,内容返回gzip中的内容,而SDK没有正确处理。 Postman 会自动将 gzip 解压缩为 json,因此看起来可以正常工作。
因此,修复可能是在 ApiClient.java 的第 115 行添加一行:client.addFilter(new GZIPContentEncodingFilter(false));
我还在我的空间中创建了源 github 存储库,并修复了这两个问题。拉取请求提交到主仓库。也就是让API调用的响应可以处理gzip内容并解压。 https://github.com/xiaodongliang/forge-api-java-client
对于影响某些使用 SDK 的项目的两个问题,我们深表歉意。
【讨论】:
以上是关于模型衍生 API 响应未通过 Jackson 映射的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Forge 模型衍生 API 获取 revit 模型的单位?