使用Jersey添加标头授权

时间:2016-03-25 15:24:14

标签: java rest jersey

我做了一个简单的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启动并运行。另外,我如何在标题中添加授权?如果不是泽西岛,你知道其他任何适合和易于使用的文件,即使是白痴也可以遵循吗?

1 个答案:

答案 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中。