Aem 具有json扩展名的递归选择器无效

Aem 具有json扩展名的递归选择器无效,aem,sling,Aem,Sling,我正在使用 @Component(service=Servlet.class, property={ Constants.SERVICE_DESCRIPTION + "=Simple Demo Servlet", "sling.servlet.methods=" + HttpConstants.METHOD_GET, "sling.servlet.resourc

我正在使用

@Component(service=Servlet.class,
           property={
                   Constants.SERVICE_DESCRIPTION + "=Simple Demo Servlet",
                   "sling.servlet.methods=" + HttpConstants.METHOD_GET,
                   "sling.servlet.resourceTypes="+ "myapp/components/structure/page",
                   "sling.servlet.extensions=" + "json",
                   "sling.servlet.selectors=" + "myselector"
 })
但是当调用URL
/content/myapp/en.myselector.js
时,我得到了一个错误

Invalid recursion selector value 'myselector'
Cannot serve request to /content/myapp/en.myselector.json in 
org.apache.sling.servlets.get.DefaultGetServlet
如果我们从注释中删除
“sling.servlet.extensions=“+”json”,
,我们可以使用
/content/myapp/en.myselector.js
/content/myapp/en.myselector.html
而不是
/content/myapp/en.myselector.json


需要其他配置吗?或者它与
DefaultGetServlet
冲突?我们试图使用servlet和JSON扩展在语义上合理地将JSON从资源中公开出来。

因为您已经针对资源而不是路径注册了servlet,所以资源实际上是页面的
jcr:content
节点,而不是页面节点本身

因此,当使用URL中的
jcr:content
进行访问时,servlet应该可以工作,如下所示


/content/myapp/en/_jcr\u content.myselector.json

由于您已针对资源而不是路径注册了servlet,因此资源实际上是页面的
jcr:content
节点,而不是页面节点本身

因此,当使用URL中的
jcr:content
进行访问时,servlet应该可以工作,如下所示


/content/myapp/en/_jcr_content.myselector.json

您是否尝试使用
/content/myapp/en/_jcr_content.myselector.json
。由于您是针对资源注册servlet,因此页面的资源类型将位于
jcr:content
节点中,而不是页面节点本身。感谢@rakhi4110,它与
jcr:content
一起工作。我认为,当选择器和扩展都在那里时,直到需要
jcr:content
为止,否则,如果只有选择器在那里,它就不需要
jcr:content
.js
.html
。您可以发布答案,我可以接受。您是否尝试使用
/content/myapp/en/_jcr\u content.myselector.json
。由于您是针对资源注册servlet,因此页面的资源类型将位于
jcr:content
节点中,而不是页面节点本身。感谢@rakhi4110,它与
jcr:content
一起工作。我认为,当选择器和扩展都在那里时,直到需要
jcr:content
为止,否则,如果只有选择器在那里,它就不需要
jcr:content
.js
.html
。你可以发布答案,我可以接受。