我需要以 JSON 格式显示给定路径中所有子页面和孙页面的标题和名称。请提供实施方案。
首先你必须自己尝试一些东西,然后你寻求帮助,而不是完整的解决方案!无论如何,那里有几个解决方案。
根据Adobe这里可以实现JSON格式的页面信息:
package com.adobe.example;
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Properties;
import org.apache.felix.scr.annotations.Property;
import org.apache.felix.scr.annotations.ReferenceCardinality;
import org.apache.felix.scr.annotations.Service;
import org.apache.felix.scr.annotations.Reference;
import org.apache.sling.api.SlingHttpServletRequest;
import org.apache.sling.api.resource.Resource;
import org.apache.sling.api.resource.ResourceResolver;
import org.apache.sling.commons.json.JSONException;
import org.apache.sling.commons.json.JSONObject;
import com.day.cq.wcm.api.Page;
import com.day.cq.wcm.api.PageInfoProvider;
@Component(metatype = false)
@Properties({
@Property(name="service.description", value="Returns the public URL of a resource.")
})
@Service
public class PageUrlInfoProvider implements PageInfoProvider {
@Reference(cardinality = ReferenceCardinality.OPTIONAL_UNARY)
private com.day.cq.commons.Externalizer externalizer;
private String fetchExternalUrl(ResourceResolver rr, String path) {
return externalizer.publishLink(rr, path);
}
public void updatePageInfo(SlingHttpServletRequest request, JSONObject info, Resource resource)
throws JSONException {
Page page = resource.adaptTo(Page.class);
JSONObject urlinfo = new JSONObject();
urlinfo.put("publishURL", fetchExternalUrl(null,page.getPath()));
info.put("URLs",urlinfo);
}
}
或者您可以尝试此页面寻求解决方案
请参考以下可能有用的链接:
http://www.nateyolles.com/blog/2015/12/converting-aem-sling-resources-to-json。
除了上述解决方案之外,您还可以使用递归级别来获取 JSON 格式的数据,例如 /content/we-retail/language-masters/en.{placeholder}.json
将占位符替换为您要打印的节点级别,并在需要时返回 JSON。
想要了解更多不同格式的渲染数据, 请参阅:https://sling.apache.org/documentation/bundles/rendering-content-default-get-servlets.html