【发布时间】:2023-02-20 08:01:26
【问题描述】:
我有一个调用第 3 方 api 并获取 json 响应的 sling servlet。我已经使用 Jackson 将 json 响应映射到 pojo 类。我现在必须直观地显示这个动态获取和映射的响应。我怎么做?响应映射后我被卡住了
【问题讨论】:
标签: jackson aem sling sightly sling-models
我有一个调用第 3 方 api 并获取 json 响应的 sling servlet。我已经使用 Jackson 将 json 响应映射到 pojo 类。我现在必须直观地显示这个动态获取和映射的响应。我怎么做?响应映射后我被卡住了
【问题讨论】:
标签: jackson aem sling sightly sling-models
使用新版本的 Sling 模型,您可以通过指定资源类型和要在模型注释中使用的选择器,直接将模型公开为 Servlet。当模型被加载到 Apache Sling 中时,它会自动注册一个与模型对应的 Servlet,允许您几乎零额外代码,创建一个 Servlet 来访问模型的 JSON 表示。太酷了!
以上生活让您的生活更轻松!
您可以在 Sling 模型中拥有所有对象。由于 sling 模型充当 servlet,您可以进行 AJAX 调用并获得实时响应。
请参考这份文件。 https://blogs.perficient.com/2018/07/26/no-servlets-required-exporting-data-with-sling-models/
【讨论】:
正确的路径是:
HTL/Sightly -> Sling Model -> OSGi Service -> External API
因此,您必须提取将数据提取到 OSGi 服务中的代码。
但请保护调用外部 API 的代码。例如,如果外部 API 没有响应或速度极慢,它可能会消耗 AEM 的所有可用线程。然后 AEM 可能完全无法使用。为了保护它,您可以使用信号量作为示例。
【讨论】:
假设返回的 JSON 是任意的,最好的办法就是将其显示为字符串。为此,我不建议将 JSON 响应映射到 POJO,而是建议使 Sling 模型适应响应。
然后,您可以使用 data-sly-use.model 将该 Sling 模型设置为您的 sightly 代码中的模型,并且在 Sling 模型构造函数中,您可以将响应值设置为 sling 模型的属性。
然后,您需要做的就是将该属性放在可见的 html 中的 ${} 中。
如果 JSON 的格式/结构不是完全未知的,您可以直接使用 POJO。创建一些条件来测试 POJO 具有哪些属性,以便您可以将它们放入可见代码中。
【讨论】: