带有 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
我正在使用
注册 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