我有两个看起来像这样的泽西方法
@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'方法。
对我来说,简单地列出这些查询参数会像这样影响映射,这似乎很奇怪。有没有办法解决它?
答案 0 :(得分:1)
事实证明,问题实际上与我在界面和实现中声明注释的方式有关。
我有一个方法,如:
@GET
@Path("/mine")
@Produces(MediaType.APPLICATION_JSON)
List<MyStuff> getAllMyStuff(@QueryParam("offset") int offset, @QueryParam("limit") int limit);
和
这样的实现列出getAllMyStuff(@QueryParam(“offset”)int offset, @QueryParam(“limit”)int limit);
显然在实现方法上有任何泽西注释会最终否定接口上的'继承'。只需将我的实现改为
即可List getAllMyStuff(int offset, int limit);
解决了这个问题。谢谢你的帮助!
答案 1 :(得分:0)
我相信你的问题是&#34;我的&#34;匹配getMyStuff和getAllMyStuff方法。要消除歧义,您可以:
@GET
@Path("/")
@Produces(MediaType.APPLICATION_JSON)
List<MyStuff> getAllMyStuff(@QueryParam("offset") int offset, @QueryParam("limit") int limit);
@GET
@Path("/{id}")
@Produces(MediaType.APPLICATION_JSON)
MyStuff getMyStuff(@PathParam("id"));
如果您需要将/ mine保留为路径,则可以进一步指定id的有效值,以便不会发生冲突。
例如,如果您的所有ID都是数字:
@GET
@Path("/mine")
@Produces(MediaType.APPLICATION_JSON)
List<MyStuff> getAllMyStuff(@QueryParam("offset") int offset, @QueryParam("limit") int limit);
@GET
@Path("/{id: [0-9]?}")
@Produces(MediaType.APPLICATION_JSON)
MyStuff getMyStuff(@PathParam("id"));
注意:我不确定我是否正确使用正则表达式。