我正在跟踪两个完全不同的URL,但无法解释原因:

RESTEASY002142:

   Multiple resource methods match request "GET /devices/distinctValues/3".
   Selecting one.

Matching methods:
[public javax.ws.rs.core.Response
mypackage.DevService.getDistinctValues(int) throws java.lang.Exception,

public javax.ws.rs.core.Response
mypackage.DevRESTService.getDevice(int,java.lang.String)
throws java.lang.Exception]

此警告不应出现,因为URL完全不同。如果有人知道为什么会这样:

两种方法的URL:
getDevice:
@GET
@Path("devices/{customerId}/{deviceIds}")
@Produces({ "application/json" })
getDistinctValues:
@GET
@Path("devices/distinctValues/{customerId}")
@Consumes("application/json")
@Produces("application/json")

最佳答案

发生警告是因为您的请求字符串可以匹配两个路径模板。请求"devices/distinctValues/3"

  • 与该devices/distinctValues/{customerId}中的customerId = "3"匹配
  • 与该devices/{customerId}/{deviceIds}customerId = "distinctValues"中的deviceIds = "3"匹配。

  • There is no type resolution,并且由于您的请求是String,因此无法告诉customerId它不能接受"distinctValues"

    解决方法是,您可以指定regex,如链接的问题所示,或使用RESTEasy proxy framework,它基本上是服务器(您的JAX-RS资源)和客户端都使用的共享接口(interface),然后您有一种通用语言解析度。请注意,文档示例中有一个错字。

    10-06 09:20