我有以下 javax rs 注释接口:
@Path("/")
public interface MyRestEndpoint {
@GET
@Produces(MediaType.APPLICATION_JSON)
@Path("myapp/resources/resourceId/{resourceId}/memberId/{memberId}")
MyResource findMyResource(@PathParam("resourceId") int resourceId,
@PathParam("memberId") long memberId);
我通过这样创建的球衣代理客户端调用它:
MyRestEndpoint myRestEndpointForTests = WebResourceFactory.newResource(MyRestEndpoint.class, lobbyClient().target(myHost));
...
myRestEndpointForTests.findMyResource(resourceId, memberId);
但是当我这样做时,我得到以下异常:
java.lang.IllegalStateException: Unresolved variables; only 0 value(s) given for 2 unique variable(s)
at org.glassfish.jersey.client.JerseyWebTarget.getUri(JerseyWebTarget.java:134)
at org.glassfish.jersey.client.JerseyWebTarget.request(JerseyWebTarget.java:214)
at org.glassfish.jersey.client.JerseyWebTarget.request(JerseyWebTarget.java:59)
at org.glassfish.jersey.client.proxy.WebResourceFactory.invoke(WebResourceFactory.java:312)
at com.sun.proxy.$Proxy89.findCurrentTableOfPlayer(Unknown Source)
通过 Jersey 代码库进行了一些调试后,似乎 WebResourceFactory 正在尝试通过循环 MyRestEndpoint 类上的注释来创建 WebTarget。它拾取两个注释和两个提供的值,但似乎覆盖了任何先前解析的路径参数,因为它在它们上循环(所以它的左边只有 memberId 路径参数被解析)。谁能解释为什么?这是错误还是预期行为?如何支持多个路径参数?
我知道这是特定于通过注释配置多个路径参数的。因为我在带注释的接口中有其他方法,它们只有一个路径参数,并且在以相同方式调用时可以正常工作。
我正在使用 Jersey v2.16 组件和 Javax rs v2.0.1 组件