是否可以通过Jersey资源使用Google的自定义方法?

时间:2019-03-11 09:18:51

标签: java rest api jax-rs jersey-2.0

我一直在寻找一种使我的JAX-RS API更具可读性的方法,并且遇到了Google的“自定义方法”方法:

https://cloud.google.com/apis/design/custom_methods

之所以寻找它,是因为我的某些实体执行的动作比我用传统HTTP动词表达的动作更多。 Google模式是在URI的末尾使用冒号(:),将实体/集合与所需的操作分开。

我试图将此模式应用于简单的Jersey资源,只是为了测试如何完成。我有一个用StudentDetailsResource注释的资源类@Path("students/{studentId}")和一些用@Path注释的方法。

如果我的方法在自定义方法之前有另一个实体,则一切正常。假设enroll方法带有注释 @Path("subjects/{subjectId}:enroll")

当操作恰好在资源类URI之后时,问题就出现了,因为@Path使用了prefixWithSlash所有子资源的URI模板。因此,如果我有一个dropout方法,则注释看起来像@Path(":dropout"),但是URI模板将变成/students/{studentId}/:dropout,这个/:会在匹配阶段中断。

我已经了解了Jersey Providers和ResourceDelegates,但找不到替代prefixWithSlash的URI模板默认操作的方法。

问题是:如何应用Google的自定义方法或如何避免Jersey的默认prefixWithSlash行为?

注意:我知道这是一个愚蠢的示例,还有其他解决此特定情况的方法,但是我有更复杂的情况,可以从自定义方法中受益。

0 个答案:

没有答案