CQ - 检查资源对象是否有效

CQ - Check whether the resource object is valid

我需要检查以下 'resource' 对象的资源对象是否有效。例如,如果我在这种情况下传递 url 之类的任何 getResource("some path which is not available in cq"),我需要对其进行限制

Resource resource= resourceResolver.getResource(/content/rc/test/jcr:content");
Node node = resource.adaptTo(Node.class);
String parentPagePath= node.getProperty("someproperty").getValue().getString();

有什么办法吗?

如果您使用 getResource,空检查就足够了。如果你使用resolve,那么你必须使用!ResourceUtil.isNonExistingResource(resource)。 在节点级别,您可以使用 hasProperty.

检查 属性 是否存在

正如 Thomas 所说,ResourceResolver.getResource() returns null 如果您作为参数提供的路径不存在。对资源进行空检查应该可以解决您的问题。

Resource resource= resourceResolver.getResource("some path which is not available in cq");
if(resource != null){
Node node = resource.adaptTo(Node.class);
String parentPagePath= node.getProperty("someproperty").getValue().getString();
}

附注: 大多数情况下使用包装比使用较低级别API更好,除非有令人信服的理由这样做。

因此,我建议您处理 ValueMap(Sling API) to retrieve/set properties of Node rather than dealing with the Node (JCR API)

Resource resource= resourceResolver.getResource("some path which is not available in cq");
    if(resource != null){
    ValueMap mapWithAllTheValues = resource.adaptTo(ValueMap.class);
    String parentPagePath= mapWithAllTheValues.get("someproperty", String.class);
    }

参考: https://docs.adobe.com/docs/en/cq/5-6-1/javadoc/org/apache/sling/api/resource/ResourceResolver.html#getResource(java.lang.String)