gpt4 book ai didi

annotations - 使用 Sling Servlet 的多个选择器

转载 作者:行者123 更新时间:2023-12-02 02:55:18 25 4
gpt4 key购买 nike

简短版本:如何使用 Felix 注释对 sling servlet 强制基于多个选择器的 servlet 进行最匹配?

我在 OSGI 包中定义了几个 servlet。我正在使用 org.apache.felix.scr.annotations.sling.SlingServlet 注释。

@SlingServlet(
methods={GET},
selectors {"v1"}
...
)
public class MyServlet extends SlingAllMethodsServlet {}

...

@SlingServlet(
methods={GET},
selectors {"v1","special"}
...
)
public class MySpecialServlet extends MyServlet {}

我的问题是我找不到强制 MySpecialServlet 仅在两个选择器都存在时处理请求的方法。

GET http://localhost/my/resource.v1.special.json

有时它只会处理对 v1 选择器的请求。

GET http://localhost/my/resource.v1.json

似乎在通过 felix webconsole 发布新 jar 后,如果我在任何其他资源之前请求双选择器 resource.v1.special.json,那么 MySpecialServlet 也将继续处理仅 v1 的请求。

有没有一种方法可以强制更通用的 servlet 使用当前注释来处理更通用的选择器列表?我是否缺少某些部分注释?我相信这个系统可能使用了一个旧的注解。也许值得迁移?对于我被要求做的这个小任务,我尽量不要过于打扰。

如果我将这些技术的某些部分混为一谈,请多多包涵。我刚刚解决了这个问题,但我仍在解决它。请更正任何不一致的条款。

最佳答案

通过 v1.special 注册您的 MySpecialServlet,例如 selectors = {"v1.special"}

根据documentation :

... The selectors must be configured as they would be specified in the URL that is as a list of dot-separated strings such as print.a4 ...

我知道当通过选择器列表注册 servlet 时,Sling 会单独对待它们(如在 OR 条件内)。因此,在通过 selectors = {"v1","special"} 注册您的特殊 servlet 的情况下,如果您请求,将调用 doGet 方法:

  • http://localhost/my/resource.v1.special.json
  • http://localhost/my/resource.special.json
  • http://localhost/my/resource.v1.json

关于annotations - 使用 Sling Servlet 的多个选择器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49784202/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com