使用 Jersey 添加 header 授权
Adding header authorisation with Jersey
我做了一个简单的 api,我知道它可以正常工作,因为我用 PostMan 测试过它。我想在独立的 Java 应用程序中使用它。我发现的一种解决方案是使用 Jersey。为了我的目的,我只需要做一个获取请求。这是我到目前为止所拥有的,但我只是收到 404 错误请求:
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));
}
}
这应该行不通,因为我还需要在 header 中添加授权。我希望它 return "API key missing" 不过。
你能看出我做错了什么吗?测试 api 已经开始 运行。另外,如何在 header 中添加授权?如果不是 Jersey,您是否知道任何其他适合且易于使用的文档,即使是白痴也可以遵循?
您的代码可以正常工作...在这种情况下,方法 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()
, which returns the Response
(HTTP-status != 2xx):
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));
要添加 headers 使用 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 章中。
我做了一个简单的 api,我知道它可以正常工作,因为我用 PostMan 测试过它。我想在独立的 Java 应用程序中使用它。我发现的一种解决方案是使用 Jersey。为了我的目的,我只需要做一个获取请求。这是我到目前为止所拥有的,但我只是收到 404 错误请求:
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));
}
}
这应该行不通,因为我还需要在 header 中添加授权。我希望它 return "API key missing" 不过。
你能看出我做错了什么吗?测试 api 已经开始 运行。另外,如何在 header 中添加授权?如果不是 Jersey,您是否知道任何其他适合且易于使用的文档,即使是白痴也可以遵循?
您的代码可以正常工作...在这种情况下,方法 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()
, which returns the Response
(HTTP-status != 2xx):
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));
要添加 headers 使用 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 章中。