2016-03-25 3 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 key missing».

Вы видите, что я сделал неправильно? Тест 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(); 

Этот материал описан в главе 5.3.5. Invoking a HTTP request.

+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) Builder реализует SyncInvoker ... так же, как показано в первом кодексе snippelt –

Смежные вопросы