如何将 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' 之外的其他内容。
假设我有以下模型:
@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' 之外的其他内容。