2013-08-20 14 views
25

Hier ist das Format für RESTful Anruf mit Jersey-Client hinzuzufügen:Wie Headers auf RESTful API-Aufruf

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"}} 

Hier ist meine Codes:

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

Aber es gibt Fehler

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) 

Ich glaube, ich habe Header nicht korrekt hinzugefügt.

Kann mir jemand helfen, es zu reparieren? Bitte geben Sie mir Ratschläge, wie Sie Header auf Anfrage hinzufügen können.

Vielen Dank

Antwort

15

Ich denke, Sie suchen nach Header (Name, Wert) -Methode. Siehe WebResource.header(String, Object)

Beachten Sie, dass es einen Builder zurückgibt, also müssen Sie die Ausgabe in Ihrer webResource var speichern.

+0

Hallo der Architekt, Vielen Dank für Ihre Lösung. Ich habe es getan, aber das Ergebnis ist nicht mein erwartet. Konnte ich Parameter und Überschriften gleichzeitig einstellen. Bitte sehen Sie meinen folgenden Beitrag. – Eric

+0

Dank TheArchitect, das Problem ist gelöst! – Eric

31

Ich verwende den Header (name, value) Methode und geben die Rückkehr zu 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

Ich sah, dass Sie bei Ihrer Frage einen String für Ihren "appKey" erstellt haben, das war richtig? appKey = "Bearer" + etwas ?? – eLRuLL

+0

Hallo eLRuLL, wenn wir "Bearer appKey" einen Namen geben, sollte es besser sein, authorizationStr zu verwenden. Um jedoch den verwendenden Speicher zum Erstellen neuer Variablen zu reduzieren. Ich benutze appKey = "Bearer" + appKey. Bitte lassen Sie mich wissen, wenn Sie irgendwelche Fragen haben. – Eric

11

Try this!

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

S.S Sie können beliebig viele Header hinzufügen!

+0

Gibt es eine Möglichkeit, eine dynamische Anzahl von Headern hinzuzufügen? – SuperCow

1

Wenn Sie einen Header für alle Jersey Antworten hinzufügen möchten, können Sie auch ein ContainerResponseFilter, von Jersey's filter documentation verwenden:

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

Stellen Sie sicher, dass Sie es richtig in Ihrem Projekt mit dem @Provider Anmerkung oder durch traditionelle initialisieren Wege mit web.xml.

+1

arbeitete für mich! Die Provider-Annotation '@ Provider' hat es geschafft –