Adobe Experience Manager中GraphQL响应结构和Markdown输出的差异

升级到AEM 6.5.23+或6.5 LTS后,内容片段的GraphQL响应结构以及Markdown输出格式与早期版本(如AEM 6.5.20)相比存在差异。 这些更改会影响联合类型查询中处理空对象的方式,以及标记字段中空白的呈现方式。 要解决此问题,请处理响应中的空对象,调整Markdown处理,并遵循一致的持久查询编码。

描述 description

环境

  • 产品: Adobe Experience Manager (AEM) Managed Services、AEM Sites
  • 版本:6.5.23+/ 6.5 LTS(包括SP1/SP2),引用的先前版本:6.5.20

问题和症状

  • 在GraphQL响应中,当多字段片段引用包含的内容片段与查询中列出的任何允许的模型都不匹配时,AEM 6.5.23及更高版本和6.5 LTS会为这些条目返回空的JSON对象,而早期版本会完全忽略它们。
  • 富文本字段的Markdown输出显示空白处理方面的差异,例如段落或块之间有额外的空格或空白行。
  • AEM 6.5.23及更高版本和6.5 LTS中的持久查询端点可以容忍未编码的特殊字符,但它仍需要URL编码才能实现一致行为。

解决方法 resolution

要解决此问题,请执行以下步骤:

  1. 处理联合类型查询返回的空JSON对象:

    • 处理GraphQL响应时,过滤掉客户端上的空对象(无属性的对象)。
    • 或者,更新持久查询以包含所有可能引用的模型的片段,以确保为每个类型返回相关数据。
  2. Markdown空白和格式的差异:

    • 如果精确的空格或格式至关重要,请考虑使用字段的HTML或JSON表示形式,而不是Markdown。
    • 或者,在渲染之前通过折叠重复的空格或空白行在后处理期间标准化空格。
  3. 持久查询编码:

    • 根据记录的模式,始终对持久查询后缀和变量中的特殊字符(如分号、空格和冒号)进行URL编码。
    • 不要依赖较新版本中引入的对未编码字符的容错性提高,因为未来更新中并不保证会出现此行为。
  4. 验证:

    • 如果需要,客户端应用程序可正确地从GraphQL响应中过滤掉空对象。
    • 将标准化步骤应用于Markdown输出后,呈现的内容会按预期显示。
    • 通过遵循编码要求,持久查询在各个环境中始终如一地发挥作用。

注释

  • 由于AEM 6.5.23+ / 6.5 LTS和更新的GraphQL引擎中引入的有意更改,预计会出现所述行为。
  • 语义一致性(正确的结构和内容)会得到维护;但是,无法保证各个版本之间的字节对字节相同的Markdown输出。
  • 如果发现语义问题(如缺少内容或结构不正确),则可能需要进一步调查,因为这些问题可能表示存在缺陷,而不是预期的行为变化。

相关阅读

recommendation-more-help
experience-cloud-kcs-help-kbarticles