2013-08-20 15 views
25

Ecco il formato per la chiamata RESTful:Come aggiungere intestazioni su chiamata RESTful utilizzando 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"}} 

Ecco i miei codici:

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

ma restituisce errore

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) 

Penso di non aver aggiunto correttamente le intestazioni.

Qualcuno può aiutarmi a risolverlo? Vi prego di darmi consigli su come aggiungere intestazioni su richiesta.

Grazie

risposta

15

Penso che siete in cerca di intestazione (nome, valore) metodo. Vedi WebResource.header(String, Object)

Nota restituisce un Builder, quindi è necessario salvare l'output nella variabile webResource var.

+0

Ciao L'architetto, grazie per la soluzione. L'ho fatto, ma il risultato non è quello che mi aspettavo. Posso impostare i parametri e le intestazioni allo stesso tempo. Si prega di consultare il mio post successivo. – Eric

+0

Grazie a TheArchitect, il problema è risolto! – Eric

31

Io uso l'intestazione (nome, valore) metodo e danno il ritorno alla 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

Ho visto che sulla tua domanda stavi creando una stringa per la tua "appKey", che era corretta? appKey = "Portatore" + qualcosa ?? – eLRuLL

+0

Ciao eLRuLL, se diamo un nome a "Bearer appKey", dovrebbe essere meglio usare authorStr. Tuttavia, al fine di ridurre l'utilizzo della memoria per la creazione di una nuova variabile. Io uso appKey = "bearer" + appKey. Per favore fatemi sapere se avete domande. – Eric

11

Prova questa!

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 È possibile aggiungere qualsiasi numero di intestazioni come questo!

+0

C'è un modo per aggiungere una quantità dinamica di intestazioni? – SuperCow

1

Se si desidera aggiungere un colpo di testa a tutte le risposte Jersey, si potrebbe anche usare un ContainerResponseFilter, da 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 :-)"); 
    } 
} 

Assicurarsi che si inizializza correttamente nel progetto utilizzando l'annotazione @Provider o attraverso i tradizionali modi con web.xml.

+1

ha funzionato per me! l'annotazione del fornitore '@ Provider' ha fatto il trucco –

Problemi correlati