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 楼答案
问题在于,您将查询参数作为路径的一部分包含在内,并且它们可能在传递到服务器之前经过URL编码。相反,请显式设置查询参数(这也使变量的使用更容易):
请注意,打开服务器调试,以显示请求的实际URL的位置以及如何解释这些URL,通常会很有帮助。这将表明服务器看到的URL有问题