使用 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 章中。