为组件启用JSON导出

组件可以基于建模器框架生成其内容的JSON导出。

概述

JSON导出基于Sling ModelsSling Model Exporter框架(它本身依赖Jackson批注)。

这意味着,如果组件需要导出JSON,则必须具有Sling模型。 因此,您需要按照以下两个步骤在任何组件上启用JSON导出。

为组件定义Sling模型

首先,必须为组件定义Sling模型。

注意

有关使用Sling模型的示例,请参阅文章在AEM中开发Sling模型导出器。

Sling Model实现类必须添加以下注释:

@Model(... adapters = {..., ComponentExporter.class})
@Exporter(name = ExporterConstants.SLING_MODEL_EXPORTER_NAME, extensions = ExporterConstants.SLING_MODEL_EXTENSION)
@JsonSerialize(as = MyComponent.class)

这可确保使用.model选择器和.json扩展模块自行导出组件。

此外,它指定Sling Model类可适用于ComponentExporter接口。

注意

Jackson批注通常不在Sling Model类级别指定,而是在Model界面级别指定。 这是为了确保将JSON导出视为组件API的一部分。

注意

ExporterConstantsComponentExporter类来自com.adobe.cq.export.json包。

使用多个选择器

尽管不是标准用例,但除了model选择器外,还可以配置多个选择器。

https://<server>:<port>/content/page.model.selector1.selector2.json

但是,在这种情况下,model选择器必须是第一个选择器,扩展名必须为.json

注释Sling Model接口

要由JSON Exporter框架考虑,模型接口应实现ComponentExporter接口(对于容器组件,为ContainerExporter)。

然后,将使用Jackson批注对相应的Sling Model接口(MyComponent)进行批注,以定义如何导出(序列化)它。

需要对“模型”界面进行正确注释,以定义哪些方法应进行序列化。 默认情况下,所有符合getter通常命名惯例的方法都将序列化,并将从getter名称自然地派生其JSON属性名称。 可以使用@JsonIgnore@JsonProperty重命名JSON属性来阻止或覆盖此属性。

示例

核心组件自1.1.0版核心组件以来一直支持JSON导出,并可用作参考。

有关示例,请参阅图像核心组件及其注释界面的Sling Model实现。

GITHUB上的代码

您可以在GitHub上找到此页面的代码

有关更多详细信息,请参阅:

On this page

Adobe Summit Banner

A virtual event April 27-28.

Expand your skills and get inspired.

Register for free
Adobe Summit Banner

A virtual event April 27-28.

Expand your skills and get inspired.

Register for free
Adobe Maker Awards Banner

Time to shine!

Apply now for the 2021 Adobe Experience Maker Awards.

Apply now
Adobe Maker Awards Banner

Time to shine!

Apply now for the 2021 Adobe Experience Maker Awards.

Apply now