Sling servlet带有json扩展名的无效递归选择器

时间:2018-06-20 21:12:26

标签: aem sling

我正在使用注册一个Sling Servlet

@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 <host:port>/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",,则可以使用<host:port>/content/myapp/en.myselector.js<host:port>/content/myapp/en.myselector.html而不是<host:port>/content/myapp/en.myselector.json来访问servlet

是否需要其他配置?或与DefaultGetServlet冲突?我们正在尝试使用servlet和JSON扩展在语义上有意义的方式将JSON暴露于资源之外。

1 个答案:

答案 0 :(得分:2)

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

因此,当通过如下所示的URL中的jcr:content访问servlet时,它应该可以工作

<host:port>/content/myapp/en/_jcr_content.myselector.json