2013-08-20 18 views
25

Tu jest format dla relaksującego rozmowy:Jak dodać nagłówki na relaksującego rozmowy za pomocą Jersey Client API

HEADERS: 
    Content-Type: application/json;charset=UTF-8 
    Authorization: Bearer Rc7JE8P7XUgSCPogjhdsVLMfITqQQrjg 

REQUEST: 
    GET https://api.example.com/1/realTime?json={"selection":{"includeAlerts":"true","selectionType":"registered","selectionMatch":"","isTheEvent":"true","includeRuntime":"true"}} 

Oto moje kody:

   try 
       { 
       Client client = Client.create(); 
       WebResource webResource = 
         client.resource("https://api.example.com/1/realTime?json= 
         {"selection":{"includeAlerts":"true","selectionType":"registered","selectionMatch":"","isTheEvent":"true","includeRuntime":"true"}}"); 

       //add header:Content-Type: application/json;charset=UTF-8 
       webResource.setProperty("Content-Type", "application/json;charset=UTF-8"); 

       //add header: Authorization Bearer Rc7JE8P7XUgSCPogsdfdLMfITqQQrjg 
       value = "Bearer " + value; 
       webResource.setProperty("Authorization", value); 

       MultivaluedMap<String, String> queryParams = new MultivaluedMapImpl(); 
       queryParams.add("json", js); 

       //Get response from RESTful Server 
       jsonStr = webResource.get(String.class); 
       System.out.println("Testing:"); 
       System.out.println(jsonStr); 

       } 
       catch (Exception e) 
       { 
        System.out.println (e.getMessage()); 
        e.printStackTrace(); 
        System.exit(0); 
       } 

Ale zwraca błąd

com.sun.jersey.api.client.UniformInterfaceException: GET https://api.example.com/1/realTime? returned a response status of 500 
    at com.sun.jersey.api.client.WebResource.handle(WebResource.java:607) 
    at com.sun.jersey.api.client.WebResource.get(WebResource.java:187) 
    at net.yorkland.restful.GetThermostatlist.GetThermostats(GetThermostatlist.java:60) 

Myślę, że nie dodałem poprawnie nagłówków.

Czy ktoś może mi pomóc to naprawić? Proszę o poradę, jak dodać nagłówki na życzenie.

Dziękujemy

Odpowiedz

15

Myślę, że szukasz metody nagłówka (nazwa, wartość). Patrz: WebResource.header(String, Object)

Uwaga: zwraca Builder, więc musisz zapisać dane wyjściowe w swoim webResource var.

+0

Witam architekta, dziękuję za rozwiązanie. Zrobiłem to, ale wynik nie jest moim oczekiwaniem. Czy mogę ustawić parametry i nagłówki w tym samym czasie. Zobacz mój następujący post. – Eric

+0

Dzięki TheArchitect, problem został rozwiązany! – Eric

31

używam nagłówek (nazwa, wartość) sposób i dać powrót do WebResource var:

Client client = Client.create(); 
WebResource webResource =client.resource("uri"); 

MultivaluedMap<String, String> queryParams = new MultivaluedMapImpl(); 
queryParams.add("json", js); //set parametes for request 

appKey = "Bearer " + appKey; // appKey is unique number 

//Get response from RESTful Server get(ClientResponse.class); 
ClientResponse response = null; 
response = webResource.queryParams(queryParams) 
         .header("Content-Type", "application/json;charset=UTF-8") 
    .header("Authorization", appKey) 
    .get(ClientResponse.class); 

String jsonStr = response.getEntity(String.class); 
+0

Widziałem, że na pytanie, które tworzysz ciąg dla swojego "AppKey", to było prawidłowe? appKey = "Nosiciel" + coś? – eLRuLL

+0

Cześć eLRuLL, jeśli nadamy nazwę "Upoważniamy appKey", powinno być lepiej używać authorizedStr. Jednak w celu zmniejszenia wykorzystania pamięci do tworzenia nowej zmiennej. Używam appKey = "nośnik" + appKey. Daj mi znać, jeśli masz jakieś pytania. – Eric

11

Spróbuj tego!

Client client = ClientBuilder.newClient(); 

String jsonStr = client 
      .target("http:....") 
      .request(MediaType.APPLICATION_JSON) 

      .header("WM_SVC.NAME", "RegistryService") 
      .header("WM_QOS.CORRELATION_ID", "d1f0c0d2-2cf4-497b-b630-06d609d987b0") 

      .get(String.class); 

P.S Możesz dodać dowolną liczbę takich nagłówków!

+0

Czy istnieje sposób na dodanie dynamicznej liczby nagłówków? – SuperCow

1

Jeśli chcesz dodać nagłówek do wszystkich odpowiedzi Jersey, można również użyć ContainerResponseFilter z Jersey's filter documentation:

import java.io.IOException; 
import javax.ws.rs.container.ContainerRequestContext; 
import javax.ws.rs.container.ContainerResponseContext; 
import javax.ws.rs.container.ContainerResponseFilter; 
import javax.ws.rs.core.Response; 

@Provider 
public class PoweredByResponseFilter implements ContainerResponseFilter { 

    @Override 
    public void filter(ContainerRequestContext requestContext, ContainerResponseContext responseContext) 
     throws IOException { 

      responseContext.getHeaders().add("X-Powered-By", "Jersey :-)"); 
    } 
} 

Upewnij się, że go zainicjować poprawnie w projekcie przy użyciu adnotacji @Provider lub poprzez tradycyjny sposoby z web.xml.

+1

pracował dla mnie! Adnotacja dostawcy '@ Provider' rozwiązała problem –