我有一个类,它的注释@Path
如下:
@Path("widgets")
@Produces(MediaType.APPLICATION_XML)
public class WidgetResource {
@GET
public Response getWidgets(@QueryParam("limit"))
{
//This class returns the plural noun, a list of widgets
//...}
@GET
@Path("widget/{id}")
public Response getWidgetById(@PathParam("id") long id)
{
//This class returns a single widget by id
//...}
当我启动测试客户端时,localhost/widgets 按预期映射,但是当getWidgetById
方法映射到localhost/widgets/widget/{id}
. 这不是我想要的——我想要localhost/widgets and localhost/widget/{id}
我曾尝试在类级别省略@Path
注释,但这会阻止 Jersey 将此类识别为 REST 资源(我尝试了ScanningResourceConfig
和ClassNameResourceConfig
- 两者都未能将类加载为资源,除非@Path
在类级别有 a )。
我想一个(丑陋的)解决方法是在WidgetResource
类和WidgetsResource
类之间拆分方法。我认为这是一个糟糕的解决方案,因为这两种方法在同一个类中共享资源,但我真的需要 REST-ful localhost/widget
(对于单个实体)和localhost/widgets
(对于复数)。
@Path
我是否遗漏了什么 - 如果我只是注释方法(我无法让它工作),我是否可以通过某种方式让 Jersey 将该类作为资源类拾取,如果没有,我可以强制绝对映射( @Path(/widget/{id})
)或一些相对映射 ( @Path(../widget/id
) - 这些在现实中都不起作用 - 只是我所追求的类比。谢谢!