我做了一个简单的api,我知道它正在运行,因为我已经使用PostMan进行了测试。我想在独立的Java应用程序中使用它。我发现的一个解决方案是使用泽西岛。出于我的目的,我只需要做一个获取请求。这是我到目前为止,但我刚收到404 Bad request:
package apitest;
import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.WebTarget;
import javax.ws.rs.core.MediaType;
public class Apitest {
public static void main(String[] args) {
Client client = ClientBuilder.newClient();
WebTarget target=client.target("http://188.166.152.46/task_manager/v1/tasks");
System.out.println(target.request(MediaType.APPLICATION_JSON).get(String.class));
}
}
这不应该工作,因为我还需要在标题中添加授权。我希望它能够返回" API密钥丢失"虽然。
你能看出我做错了什么吗?测试api启动并运行。另外,我如何在标题中添加授权?如果不是泽西岛,你知道其他任何适合和易于使用的文件,即使是白痴也可以遵循吗?答案 0 :(得分:0)
您的代码正在运行...方法SyncInvoker::get(java.lang.Class)
在这种情况下会引发异常。您可以捕获异常并打印响应:
Client client = ClientBuilder.newClient();
WebTarget target=client.target("http://188.166.152.46/task_manager/v1/tasks");
try{
target.request(MediaType.APPLICATION_JSON).get(String.class);
} catch (WebApplicationException ex) {
Response response = ex.getResponse();
System.out.println(response.getStatusInfo() + "(" + response.getStatus() + ")");
System.out.println(response.readEntity(String.class));
}
如果你不喜欢捕获异常,你可以使用SyncInvoker::get()
,如果请求不成功(HTTP-status!= 2xx),它会返回Response
:
Client client = ClientBuilder.newClient();
WebTarget target=client.target("http://188.166.152.46/task_manager/v1/tasks");
Response response =target.request(MediaType.APPLICATION_JSON).get();
System.out.println(response.getStatusInfo() + "(" + response.getStatus() + ")");
System.out.println(response.readEntity(String.class));
要添加标题,请使用Invocation.Builder:
Invocation.Builder builder = client
.target("http://188.166.152.46/task_manager/v1/tasks")
.request(MediaType.APPLICATION_JSON)
.header(HttpHeaders.AUTHORIZATION, "Bearer apikey");
Response response = builder.get();
这些内容记录在章节5.3.5. Invoking a HTTP request中。