首页 > 解决方案 > 有没有办法将 Google 的自定义方法与 Jersey 资源一起使用?

问题描述

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

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

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

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

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

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

我已阅读有关 Jersey Providers 和 ResourceDelegates 的信息,但我找不到替换 URI 模板默认操作的方法prefixWithSlash

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

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

标签: javarestapijax-rsjersey-2.0

解决方案


推荐阅读