如何将Sling Model导出为JSON并将其呈现给最终用户?

时间:2018-08-23 15:41:19

标签: aem sling sling-models

假设我具有以下模型:

@Model(adaptables = Resource.class)
public class BasicScheduleModel {
   @Self
   protected Resource resource;
   protected Envelope envelope;
   protected Status status;
   protected Metadata metadata;
   protected Data data;
   protected Messages messages;
   ........

如何将此模型作为JSON呈现给最终用户?

我知道可以使用GSON库将Java类转换为JSON,但是在这种情况下,我应该引入新字段并在@PostConstruct方法中对其进行初始化:

private String json;

@PostContruct
private void init() {
    this.json = new GsonBuilder().create().toJson(this);
}

private String getJson() {
    return this.json;
}

并且比在html中使用视线使用此模型(必须创建新组件)

<sly data-sly-use.model="com.somewebsite.models.BasicScheduleModel">
${model.json @ context='unsafe'}
</sly>

有没有组件创建的优雅解决方案吗?

1 个答案:

答案 0 :(得分:4)

如果您使用的是6.3 +,则可以使用吊索模型导出器功能来完成此操作,

https://sling.apache.org/documentation/bundles/models.html#exporter-framework-since-130-1

将代码更改为

@Model(adaptable = Resource.class, resourceType = "<resourcetype-here>") 
@Exporter(name = "jackson", extensions = "json")

<path-to-resource>.model.json的请求将以JSON格式返回模型。您可以通过Exporter批注中的配置覆盖选择器,使其与“模型”不同。