Jersey

2016-03-25 8 views
0

ile başlık yetkilendirmesi ekleme Basit bir API yaptık, PostMan ile test ettiğim için çalıştığını biliyorum. Bunu bağımsız bir Java uygulamasında kullanmak istiyorum. Bulduğum bir çözüm Jersey'i kullanmak. Benim amacım için sadece bir istek almam gerek. Ayrıca başlığındaki yetki eklemeniz gerekir gibi bu işe olmamalıdırJersey

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)); 

    } 

} 

: İşte ben bugüne kadar ama sadece 404 Kötü isteği alıyorum budur. Yine de "API anahtarı eksik" dönmesini beklerdim.

Neyi yanlış yaptığımı görebiliyor musunuz? Test API'si çalışıyor ve çalışıyor. Ayrıca, yetkilendirmeyi üstbilgiye nasıl eklerim? Eğer Jersey değilse, bir salakın bile izleyebileceği belgelerle uygun ve kullanımı kolay başka bir şey biliyor musunuz?

cevap

0

Kodunuz çalışıyor ... SyncInvoker::get(java.lang.Class) yöntemi bu durumda bir istisna atar. Sen özel durumu yakalamak ve yanıtı yazdırabilirsiniz: (! HTTP status = 2xx) Eğer durum yakalamak için sevmediğim

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)); 
} 

, sen SyncInvoker::get() kullanabilirsiniz, başarısız bir istek durumunda Response döndürür de :

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)); 

başlıkları kullanmak eklemek için 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(); 

Bu eşyalar bölümbelgelenmiştir.

+0

Sunucunuzun ne istediğini bilmiyorum :) Belki bir yetkilendirme başlığı istemiyor mu? belki böyle bir şey: '.header (" X-API-KEY "," 1 ")', ama sunucunuzun belgelerini kontrol etmek zorundasınız ... –

+0

Çalışmasını sağlamak için yönetilen teşekkürler :) Nasıl yaparsın Invocation.Builder için deneyin ve bekliyoruz? – kev002

+0

bu yöntemi kullanın: https://jersey.java.net/apidocs/latest/jersey/org/glassfish/jersey/client/JerseyInvocation.Builder.html#get(java.lang.Class) The Builder SyncInvoker uygular ... Yani ilk kod snippeltinde gösterildiği gibi –