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

Sling servlet invalid recursion selector with json extension

我正在使用

注册 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 来访问 servlet,但不能使用 <host:port>/content/myapp/en.myselector.json

需要任何其他配置吗?或者它与 DefaultGetServlet 冲突?我们试图使用在语义上有意义的 servlet 和 JSON 扩展来暴露 JSON 资源不足。

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

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

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