webentwicklung-frage-antwort-db.com.de

So fügen Sie Header für einen RESTful-Aufruf mithilfe der Jersey-Client-API hinzu

Hier ist das Format für einen RESTful-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 sind 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 zurück

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 die Header nicht richtig hinzugefügt. 

Kann mir jemand helfen, das Problem zu beheben? Bitte geben Sie mir Hinweise, wie Sie auf Anfrage Header hinzufügen.

Vielen Dank

31
Eric

Ich denke, Sie suchen nach der Kopfmethode (Name, Wert). Siehe WebResource.header(String, Object)

Beachten Sie jedoch, dass ein Builder zurückgegeben wird. Daher müssen Sie die Ausgabe in Ihrer webResource-Variable speichern.

17
TheArchitect

Ich verwende die Methode header (name, value) und gebe die Rückgabe an 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);
35
Eric

Versuche dies!

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

PS: Sie können beliebig viele Header hinzufügen!

16

Wenn Sie allen Jersey-Antworten einen Header hinzufügen möchten, können Sie auch eine ContainerResponseFilter aus Jerseys Filterdokumentation 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 sie in Ihrem Projekt korrekt mit der @Provider-Annotation oder auf herkömmliche Weise mit web.xml initialisieren.

2
Shawn S.

Dieses Snippet funktioniert gut, wenn Sie das Bearer Token mit Jersey Client senden.

    WebTarget webTarget = client.target("endpoint");

    Invocation.Builder invocationBuilder =  webTarget.request(MediaType.APPLICATION_JSON);
    invocationBuilder.header("Authorization", "Bearer "+"Api Key");

    Response response = invocationBuilder.get();

    String responseData = response.readEntity(String.class);

    System.out.println(response.getStatus());
    System.out.println("responseData "+responseData);
0
kanaparthikiran

String sBodys = "Body";

HashMap-Header = neue HashMap <> ();

Client c = Client.create ();

WebResource-Ressource = c.resource (" http: // consulta/rs ");

WebResource.Builder-Builder = resource.accept (MediaType.APPLICATION_JSON);

builder.type (MediaType.APPLICATION_JSON);

if (Kopfzeilen! = null) {

      LOGGER.debug("se setean los headers");

      for (Map.Entry<String, String> entry : headers.entrySet()) {

          String key = entry.getKey();

          String value = entry.getValue();

          LOGGER.debug("key: "+entry.getKey());

          LOGGER.debug("value: "+entry.getValue());

          builder.header(key, value);
      }
  }

ClientResponse response = builder.post (ClientResponse.class, sBodys);

0
Giovanni Perea