有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

json Java REST客户端将curl代码重写为Java代码

我正在用Java编写一个简单的REST客户机,它向服务器发送请求并检索一些数据。服务器使用令牌进行授权,该令牌必须包含在头中(根据文档)

问题是我不知道如何正确地重写它。我有一个curl命令可以很好地工作:

curl --include --header "authorization:a7b857f6.....rest of my token" --header "Content-Type: application/json" https://serverUrl/v1/search?q=someQuery

此请求返回正确答案(本例中为给定查询的一些结果)

我试图用Java重写它,但是我得到了“404-未找到资源”,尽管查询是相同的

public void getResultsByQuery() {
        Client client = ClientBuilder.newClient();
        Response response = client
                .target("https://serverUrl")
                .path("/v1/search?q=someQuery")
                .request("application/json")
                .header("Content-Type", "application/json")
                .header("authorization", "a7b857f6-........rest of my token")
                .get();

        System.out.println("status: " + response.getStatus());
        System.out.println("headers: " + response.getHeaders());
        System.out.println("body:" + response.readEntity(String.class));
}

如果我遗漏了什么,你能给我一个提示吗?这可能会是一个愚蠢的错误,但我花了几个小时试图让它起作用,而我对此一无所知


共 (1) 个答案

  1. # 1 楼答案

    问题在于,您将查询参数作为路径的一部分包含在内,并且它们可能在传递到服务器之前经过URL编码。相反,请显式设置查询参数(这也使变量的使用更容易):

    Response response = client
        .target("https://serverUrl")
        .path("/v1/search")
        .queryParam("q", "someQuery")
        .request("application/json")
        .header("Content-Type", "application/json")
        .header("authorization", "a7b857f6-........rest of my token")
        .get();
    

    请注意,打开服务器调试,以显示请求的实际URL的位置以及如何解释这些URL,通常会很有帮助。这将表明服务器看到的URL有问题