Java jax-rs路由优先级冲突

Java jax-rs路由优先级冲突,java,routing,jax-rs,Java,Routing,Jax Rs,我将jax-rs与Spring一起使用。我有两个PUT API,它们有冲突,我想优先考虑其中一个 @PUT @Path("/allQuestions") public Response method1() {} @PUT @Path("/{qustionId}") public Response method2(@PathParam("qustionId") long qustionId) {} 当我调用/allQuestions时,应用程序总是尝试将'allQuestions'字符串插入m

我将jax-rs与Spring一起使用。我有两个PUT API,它们有冲突,我想优先考虑其中一个

@PUT
@Path("/allQuestions")
public Response method1() {}

@PUT
@Path("/{qustionId}")
public Response method2(@PathParam("qustionId") long qustionId) {}
当我调用
/allQuestions
时,应用程序总是尝试将'allQuestions'字符串插入
method2
qustionId
,因此我希望优先考虑
method1


我该怎么做?

问题是method1之前缺少一行
@Consumes({MediaType.APPLICATION\u JSON})
。完整代码为:

@PUT
@Path("/availableQuestions")
@Produces({ MediaType.APPLICATION_JSON })
public Response method1() {}

@PUT
@Path("/{questionId}")
@Produces({ MediaType.APPLICATION_JSON })
@Consumes({ MediaType.APPLICATION_JSON })
public Response method2(@PathParam("questionId") long questionId) {}
我不知道为什么(edit:请参阅@peeskillet comment以获取解释),但现在我添加了
@Consumes({MediaType.APPLICATION\u JSON})


它可以正常工作。

我已经用三种不同的实现(包括Jersey和Resteasy的JAX-RS 1和2)进行了测试,alll按预期找到了第一种方法。甚至JAX-RS也规定第一个方法应该总是命中(因为它有文字字符)。(1) 测试您发布的实际代码。(2) 如果您仍然得到相同的结果,请发布足够的信息,以便我们复制它(即实现、完整类、应用程序配置、服务器等)。(3) 如果您发布的代码没有问题,请发布实际代码。(4) 发布您是如何调用/使用此资源的,这意味着客户端和我们复制问题所应采取的步骤/代码,以及步骤2中的其他重要细节。就设计而言,我个人而言,我将完全放弃
@Path(“/allQuestions”)
。如果类
@Path
/questions
,则问题集合只能通过
。/questions
,而不是
。/questions/allQuestions
访问<代码>。/questions,从语义上讲,已经是“所有问题”的意思了。@peeskillet谢谢你的帮助(它真的很有帮助),我在下面发布了问题原因的答案。有一个算法用于确定所选方法。作为一个因素包括媒体类型。由于这两种方法都匹配路径,因此接下来将检查介质类型。由于
method2
更具体(使用application/json,该方法将获胜。没有
method1
上的注释,这就像说任何媒体类型一样。最具体的总是获胜。@peeskillet我猜是这样的,但你的解释确实澄清了问题。谢谢。
@PUT
@Path("/availableQuestions")
@Produces({ MediaType.APPLICATION_JSON })
@Consumes({ MediaType.APPLICATION_JSON })
public Response method1() {}