我有两种泽西方法,看起来像这样

@GET
@Path("/mine")
@Produces(MediaType.APPLICATION_JSON)
List<MyStuff> getAllMyStuff();

@GET
@Path("/{id}")
@Produces(MediaType.APPLICATION_JSON)
MyStuff getMyStuff(@PathParam("id"));


在这种情况下,我可以请求/ mine和'getAllMyStuff',或者请求/ 123并获取正确的单个内容。但是,我想在“我的”路径上使用一些可选的查询参数,这样做似乎会使球衣循环。当我将“我的”更改为

@GET
@Path("/mine")
@Produces(MediaType.APPLICATION_JSON)
List<MyStuff> getAllMyStuff(@QueryParam("offset") int offset, @QueryParam("limit") int limit);


调用'/ mine'最终被映射到ID为'mine'的'getMyStuff'方法。

对于我来说,似乎很奇怪,仅列出这些查询参数会像这样影响映射。有什么办法可以解决它?

最佳答案

事实证明,问题实际上与我在接口和实现中声明批注的方式有关。

我有一个接口,方法如下:

@GET
@Path("/mine")
@Produces(MediaType.APPLICATION_JSON)
List<MyStuff> getAllMyStuff(@QueryParam("offset") int offset, @QueryParam("limit") int limit);


和类似的实现


列出getAllMyStuff(@QueryParam(“ offset”)int偏移量,
@QueryParam(“ limit”)int limit);


显然,在实现方法上包含任何Jersey注释最终都会否定从接口“继承”的注释。只需将我的实现更改为

List getAllMyStuff(int offset, int limit);


解决了这个问题。谢谢您的帮助!

10-06 05:50