如何将 Sling 模型导出到 JSON 并将其呈现给最终用户?

How to export Sling Model into JSON and render it to end user?

假设我有以下模型:

@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 class 转换为 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>

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

如果您使用的是 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 的请求将 return 模型采用 JSON 格式。您可以通过 Exporter 注释中的配置将选择器覆盖为除 'model' 之外的其他内容。