【问题标题】:Custom JSON renderer in AEM/SlingAEM/Sling 中的自定义 JSON 渲染器
【发布时间】:2017-08-07 11:41:41
【问题描述】:

我已经玩了一段时间了,我想,我已经 - 几乎 - 破解了它,但我仍然对我的解决方案并不完全满意。

所以,我想做的是拥有一段内容,一个项目列表,它有两个视图:标准的 HTML 视图,这样人们可以查看和编辑它;然后是供其他服务使用的 JSON 端点。

首先我认为创建两个 JSP 脚本来呈现内容很简单:

  • /apps/my-stuff/components/list-page/html.jsp
  • /apps/my-stuff/components/list-page/json.jsp

但是 Apache Sling DefaultServlet 似乎对 json.jsp 脚本一无所知。

作为第二次尝试,我在/apps/foundation/components/primary/cq/Page/json.jsp 中创建了另一个脚本,它将被实际调用,并按照我的预期呈现页面。但是,对此有一些担忧/问题:

  • 首先,为什么系统会尊重这一点,而不是更具体的地方?
  • 文档指出,要找到合适的渲染器,首先检查sling:resourceType,然后检查sling:resourceSuperType,然后,仅作为后备检查jcr:PrimaryType。但是我认为这是相当的:jcr:PrimaryType,然后是 DefaultServlet,然后是所有其他东西。
  • 但最令人担忧的是,我不得不承认,这是相当通用的,所以它会破坏与 jcr:PrmaryType = Page 的所有网络,因此可能会产生一些副作用。

一个解决方案可能是创建一个新类型:ListPage extends Page;然后在/apps/foundation... 中为它创建一个渲染器。但是我有这种不好的感觉,这可能会带来其他问题。

所以我的问题有两个:这样做的正确方法是什么,和/或我在 URL -> 脚本 解析在 AEM/Sling 中的工作方式中缺少什么。 (因为似乎和herehere描述的有点不同。)

(显然我正在尝试为其他页面保留默认 JSON 渲染器,因为页面中的其他内容可能需要它。我什至不确定,更改这一页不会破坏此特定页面的 UI ...)

【问题讨论】:

    标签: json jsp aem sling


    【解决方案1】:

    然而 Apache Sling DefaultServlet 似乎对 json.jsp 脚本一无所知。

    您是否尝试过像这样重命名您的 JSP:“list-page.json.jsp”?

    如果您使用的是 AEM 6.3,则应查看 Sling model Exporters。它们允许您针对您的 Sling 模型(您可以创建它以对列表内容建模)自动注册一个 servlet。该 servlet 可以使用 Jackson 为您生成模型的 JSON 表示。

    如果您不使用 AEM 6.3,我建议您创建一个针对您的资源类型注册的 servlet 并使用额外的选择器。

    @SlingServlet(
       selectors = "json",
       resourceType = "my-stuff/components/list-page",
       methods = "GET")  
    

    有关 Sling Servlet 的更多信息,请访问here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-06-09
      • 1970-01-01
      • 2020-01-02
      • 2017-11-24
      • 2013-09-25
      • 2011-07-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多