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

标签 java json curl xmlhttprequest java-ws

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

问题是我不知道如何正确地重写它。我有一个运行良好的 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));
}

如果我错过了什么,你能给我一个提示吗?这可能是一些愚蠢的错误,但我花了几个小时试图让它工作,但我一无所知。

最佳答案

问题在于您将查询参数作为路径的一部分包含在内,并且它们可能在传递到服务器之前进行了 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 有问题。

关于Java REST客户端——将curl代码重写为Java代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27212743/

相关文章:

javascript - 如何将 HTML 代码转换为 JSON 对象?

html - 查看 "Page Source"显示与 cURL 不同的 HTML

java - 不幸的是 "app_name"已停止工作

java - 在java中以不同的格式编写图像会产生不同的结果

php - 无法在javascript中取消转义JSON内容

php - 使用 cURL 在文件和文件夹之间确定

bash - 如何根据来自 curl 的 HTTP 状态代码分支 shell 脚本?

java - java.sql.ResultSet、CallableStatement、SQLInput 没有通用接口(interface)

java - 顺序错误的二进制代码 - 如何正确移动它?

json - 无法从帖子请求中解析 JSON