path=/content/dam/we-retail
type=dam:Asset
p.limit=-1
p.nodedepth=2
p.hits=full
p.guesstotal=true
形成的URL/JSON QueryBuilder链接。
我可以看到每个资产的所有属性,包括jcr:content,元数据如下:
我需要将相同的结果返回给服务/端点我在AEM上为客户构建。当我将上述相同的查询翻译成“查询构建器API”
时queryParamsMap.put("type", "dam:Asset");
queryParamsMap.put("p.limit", "-1");
queryParamsMap.put("p.nodedepth", "2");
queryParamsMap.put("p.hits", "full");
queryParamsMap.put("p.guessTotal", "true");
如何检索所有值?
SearchResult result = query.getResult();
for (final Hit hit : result.getHits()) {
Resource resource = hit.getResource();
Asset asset = resource.adaptTo(Asset.class);
如果我使用asset.getMetadata()
,我们只能看到jcr:content\metadata
下的属性,而不会看到其他属性。
和
如果我使用ValueMap properties = resource.getValueMap();
,我们可以检索所有资产属性(如jcr:path,jcr:primaryType等),但不能检索"元数据"。
有没有办法获取资产节点的所有值?
答案 0 :(得分:0)
从大坝获取AEM资产的所有属性的另一种方法:资产节点本身到元数据节点(jcr:content / metadata)正在使用 Apache Sling Models 并调整返回的每个资源您对此模型的查询。
例如:
@Model(adaptables=Resource.class)
public class MyAsset{
@Inject
@Named("jcr:created")
private String createdDate;
@Inject
@Named("jcr:createdBy")
private String createdBy;
@Inject
@Named("jcr:content/jcr:lastModified")
@Optional
private String lastModified;
@Inject
@Named("jcr:content/metadata/dc:title")
@Optional
private String title;
@Inject
@Named("jcr:content/metadata/dc:description")
@Optional
private String description;
@PostConstruct
protected void init() {
// You can code here any task needed to be executed after all the injections of the model are done
}
//getters and setters...
}
注意您可以使用注释@Named指定资源的任何后代节点的任何属性。
如果您需要资源的特定和少数属性,我建议您使用此方法。如果您需要所有属性,我认为您找到的方法更好,因为您不需要创建模型来维护所有属性。
使用该模型的最终代码为:
for (Hit hit : result.getHits()) {
Resource resource = hit.getResource();
if(resource!=null){
MyAsset myAsset = resource.adaptTo(MyAsset.class);
Logger.info("The asset {} was modified on {}", myAsset.getTitle(), myAsset.getLastModified());
}
}
有关Sling Model的更多信息,请参阅: