让我们看看一些真实世界的例子,以了解处理(部分)路径的最常用方法:
遍历模型图
Getter: /log/…
→ Jenkins#getLog()
Getter with argument: /job/foo/…
→ Hudson#getJob("foo")
Dynamic getter: /job/foo/1/…
→ jenkinsdoc:hudson.model.Job#getDynamic%28java.lang.String,%20org.kohsuke.stapler.StaplerRequest,%20org.kohsuke.stapler.StaplerResponse%29[
Job#getDynamic("1" …)]
渲染视图
Index view: /job/foo*/
→ *index.jelly of Job
(or other TopLevelItem implementations)
Named view: /job/foo/changes
→ changes.jelly of Job
操作方法
操作方法
/job/foo/1/artifact
→ Run#doArtifact(…)
/job.foo/config.xml
→ @WebMethod("config.xml") doConfigDotXml(…)
索引操作方法
/search
→ Search#doIndex(…)
另外,对象可以实现多个接口来进一步控制Stapler如何处理URL:
org.kohsuke.stapler.StaplerProxy
允许将URL的处理委托给另一个对象。所以,对于 /foo/bar
, 如果 getFoo()
返回一个实现 StaplerProxy
的 getTarget()
方法的对象 x
, Stapler 将调用 x.getTarget()
并继续使用它来处理 URL 的其余部分(bar
)。
这在所有可能的URL处理选项中具有*highest priority*。
getTarget()
也返回 this
, 例如执行权限检查:对于没有通过URL获得必要权限的任何人,任何 getter 或 x
视图都不可用。
org.kohsuke.stapler.StaplerOverridable
是一个允许指定对象有选择地覆盖URL映射的接口。
如果指定的重写对象没有处理请求,则宿主对象(实现`StaplerOverridable`)将处理请求。
org.kohsuke.stapler.StaplerFallback
允许将URL的处理委托给另一个对象,类似于 StaplerProxy
,但在所有可能的 URL 处理选项中具有 lowest priority。
有关 Stapler 如何将 Java 对象模型绑定(或固定)到URL层次结构的更多信息,请参阅 Stapler 引用文档。