我正在使用注册一个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暴露于资源之外。
答案 0 :(得分:2)
由于您已经针对资源而不是路径注册了servlet,因此资源实际上是页面的jcr:content
节点,而不是页面节点本身。
因此,当通过如下所示的URL中的jcr:content
访问servlet时,它应该可以工作
<host:port>/content/myapp/en/_jcr_content.myselector.json