2016-03-25 58 views
0

我做了一个简单的API,我知道它正在工作,因为我用PostMan进行了测试。我想在独立的Java应用程序中使用它。我找到的一个解决方案是使用泽西岛。为了我的目的,我只需要做一个获取请求。这是我到目前为止,但我只是得到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)); 

    } 

} 

这不应该工作,因为我也需要在标题中添加授权。我希望它会返回“API密钥丢失”,但。

你能看到我做错了吗?测试API正在运行。另外,我将如何在头中添加授权?如果不是泽西岛,你是否知道其他任何可能适合并容易使用的文档,即使是白痴也可以遵循这些文档?

回答

0

您的代码正在工作......在这种情况下,方法SyncInvoker::get(java.lang.Class)会引发异常。您可以捕获该异常并打印响应:(!HTTP状态= 2xx)上

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(),这在不成功的请求的情况下返回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(); 

这东西在章节记录。

+0

我不知道你的服务器想要什么:)也许他不想要授权头?也许是这样的:'.header(“X-API-KEY”,“1”)',但你必须检查你的服务器的文档... –

+0

管理得到它的工作谢谢:)你会怎么做尝试和期待Invocation.Builder? – kev002

+0

采取此方法:https://jersey.java.net/apidocs/latest/jersey/org/glassfish/jersey/client/JerseyInvocation.Builder.html#get(java.lang.Class)该生成器实现SyncInvoker ...所以像第一个代码片段中所示的一样 –