【问题标题】:RestEasy client can't use @PathParam argumentsRestEasy 客户端不能使用@PathParam 参数
【发布时间】:2016-01-18 12:53:20
【问题描述】:

嘿,我在使用带有 PathParam 的 resteasy 客户端方法时遇到问题。我解释一下:

我有一个在客户端和服务器端使用的接口:

@Path("/1.0/user")
@Consumes({"application/json"})
@Produces({"application/json"})
public interface UserApi {
  @GET
  @Path("/{userid}/followers")
  @PrivateApi
  public List<DXUser> getUserFollowers(@PathParam("userid") long userId);
}

在服务器端,这按预期工作,我有一个实现此接口的具体类,我的 API 在线。没问题。我可以从 URL 调用这个 API 方法:http://myapi.dev/1.0/user/1234/followers

但是,在客户端,我使用该接口通过以下代码轻松调用 API:

ResteasyClient client = new ResteasyClientBuilder().build();
ResteasyWebTarget target = client.target("http://myapi.dev");
UserApi api = target.proxy(UserApi.class);
List<DXUser> users = api.getUserFollowers(1234);

我收到一个异常:java.lang.IllegalArgumentException: You did not provide enough values to fill path parameters

我尝试用@POST 代替@GET 方法。我有同样的错误。 我尝试使用@QueryParam 并且它有效!所以问题接缝只涉及@PathParam。

我无法理解在这种情况下我做错了什么。 你知道我该如何解决这个问题吗?

谢谢 赛博

【问题讨论】:

  • 当我尝试这样做时,我得到了以下异常: RuntimeException:您必须在客户端方法或接口上定义 @Consumes 类型,或者在我调用 target.proxy(UserApi.class) 时提供默认值...
  • 您不能调试您的客户端代码以实际查看引发异常的原因吗?
  • 我已经调试过了,问题似乎出现在 RestEasyUriBuilder.buildFromValues 方法中。这个方法被调用时没有值,它发现它应该有一个参数(“userid”)所以它抛出异常。问题是为什么找不到值?

标签: java resteasy


【解决方案1】:

对不起,我弄错了。

我已导入 javax.websocket.server.PathParam 注释代替 javax.ws.rs.PathParam。

所以,Resteasy ClientProxy 无法创建好的 PathParamProcessor。

抱歉这个错误。

【讨论】:

    猜你喜欢
    • 2023-02-08
    • 2017-10-27
    • 2017-09-23
    • 1970-01-01
    • 2017-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多